我有一个像下面这样的postgres函数
(window.jQuery || document.write('<script src="/js/jquery.js"><\/script>'));
($.validator || document.write('<script src="/js/jquery-validate.js"><\/script>'));
执行此功能需要30多秒。没有这个,所有其他功能都会在10秒内执行。总计大约40秒
此处CREATE OR REPLACE FUNCTION my_schema.fn_get_status(trans_id character varying) RETURNS character varying
AS $$
DECLARE
new_status varchar;
BEGIN
SELECT status
INTO new_status
FROM my_schema.my_table
WHERE id=trans_id;
RETURN new_status;
END;
$$
LANGUAGE plpgsql;
ALTER FUNCTION my_schema.fn_get_status(trans_id character varying) OWNER TO postgres;
包含超过1000条记录,我们在此处传递的my_table
等于短划线( - ),不幸的是,有些trans_id
ID也有my_table
我进入它时的价值。我认为这是增加该查询成本的原因。
这是真正的原因,然后任何想法如何解决这个问题?
先谢谢。
答案 0 :(得分:0)
尝试在开头做检查:
CREATE OR REPLACE FUNCTION my_schema.fn_get_status(trans_id character varying) RETURNS character varying
AS $$
DECLARE
new_status varchar;
BEGIN
if trans_id = '-' then
return '';
end if;
SELECT status
INTO new_status
FROM my_schema.my_table
WHERE id=trans_id limit 1;
RETURN new_status;
END;
$$
LANGUAGE plpgsql;
ALTER FUNCTION my_schema.fn_get_status(trans_id character varying) OWNER TO postgres;
如果可能的话,尝试加入外部的my_schema.my_table,因为如果你逐一传入trans_id,性能会下降一点