下面是我在两个包含相同列名的不同表上运行的函数。
-- Function: test(character varying)
-- DROP FUNCTION test(character varying);
CREATE OR REPLACE FUNCTION test(table_name character varying)
RETURNS SETOF void AS
$BODY$
DECLARE
recordcount integer;
j integer;
hstoredata hstore;
BEGIN
recordcount:=getTableName(table_name);
FOR j IN 1..recordcount LOOP
RAISE NOTICE 'RECORD NUMBER IS: %',j;
EXECUTE format('SELECT hstore(t) FROM datas.%I t WHERE id = $1', table_name) USING j INTO hstoredata;
RAISE NOTICE 'hstoredata: %', hstoredata;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
当在包含 1000 行的表上运行上述函数时,所用时间约为 536 毫秒。
当在包含 10000 行的表上运行上述函数时,所用时间约为 27994 毫秒。
根据 1000 行的计算,10000 行的逻辑时间应该在 5360 毫秒左右,但执行时间非常长。
为了减少执行时间,请建议要进行哪些更改。