我有一个包含数百万条记录的表,但是当我想要检索某些行时,它需要更多时间来处理查询。
例如:
- 表
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.
答案 0 :(得分:1)
目前还不完全清楚你的问题是什么,但一般来说最好的办法就是在你的桌子上放一个主键,并在你经常搜索的任何其他列上建立索引(主键也是一个索引,有限制它是UNIQUE
)。
另外,不要将RETURNS TABLE
与定义一起使用,而应使用函数RETURNS SETOF employee
来使事情更易于理解和维护。