PostgreSQL:如何减少PostgreSQL中查询执行的时间?

时间:2014-03-24 06:46:01

标签: postgresql

我有一个包含数百万条记录的表,但是当我想要检索某些行时,它需要更多时间来处理查询。

例如:
- 表

CREATE TABLE employee  
(  
empid int,  
empdate timestamp  
)  

- 插入记录的功能

CREATE OR REPLACE FUNCTION insertemployee()  
RETURNS void AS  
$BODY$  
declare  
i int :=0;  
begin  
    while(i<100000)   
    loop   
    insert into employee values(i,now());  
    i:=i+1;  
    end loop;  
end;  
$BODY$  
LANGUAGE plpgsql;  

- 功能执行

select insertemployee();

Total query runtime: 891 ms.

- 检索行的功能

CREATE OR REPLACE FUNCTION retrieveemployee() RETURNS TABLE (empid int,empdate timestamp) AS  
$body$  
begin    
       return query    
       select e.empid,e.empdate from employee AS e WHERE e.empid BETWEEN 1000 and   80000;    
end;    
$body$    
LANGUAGE plpgsql;    

- 功能执行

select * from retrieveemployee();

Total query runtime: 1382 ms.

1 个答案:

答案 0 :(得分:1)

目前还不完全清楚你的问题是什么,但一般来说最好的办法就是在你的桌子上放一个主键,并在你经常搜索的任何其他列上建立索引(主键也是一个索引,有限制它是UNIQUE)。

另外,不要将RETURNS TABLE与定义一起使用,而应使用函数RETURNS SETOF employee来使事情更易于理解和维护。