增加postgres查询的成本

时间:2015-07-05 12:37:06

标签: sql performance postgresql-8.4

我有一个像下面这样的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我进入它时的价值。我认为这是增加该查询成本的原因。

这是真正的原因,然后任何想法如何解决这个问题?

先谢谢。

1 个答案:

答案 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,性能会下降一点