あなたの関数はたくさんやっています 空の仕事の。
FOR
で簡略化できます 面倒で高価な明示カーソルではなく、暗黙カーソルを使用してループします。
よく見ると、これはまったく必要ありません。 大幅に簡素化 簡単なクエリで。 SQL関数にラップしました:
CREATE OR REPLACE FUNCTION ccdb.fn_email_details_auto()
RETURNS TABLE (code integer, area smallint, action smallint, flag smallint
, ucount integer, view_cnt integer) AS
$func$
SELECT u.section_code, u.ddu_area, u.ddu_action, u.status_flag
, u.ccdb_ucount, u.ccdb_view_cnt
FROM ccdb.update_qtable u
WHERE u.entry_time >= now()::date - 1
AND u.entry_time < now()::date -- sargable!
ORDER BY u.section_code, u.ddu_area, u.ddu_action;
$func$ LANGUAGE sql;
多くである必要があります 同じものを返す間、より速くなります。
また、これを使用してください:
WHERE u.entry_time >= now()::date - 1
AND u.entry_time < now()::date
代わりに:
WHERE entry_time::date = now()::date - interval '1 day'
別の方法は引数可能であり、entry_time
でプレーンインデックスを使用できます 、これはパフォーマンスにとって非常に重要です。