我注意到以下查询在我的代码中,并希望检查是否可以优化。优化Postgres查询
UPDATE table as T1 SET C1=?
FROM
(SELECT C2, C3, C4
FROM table
WHERE C1=? and current_timestamp >= C5
ORDER BY C5 limit ? FOR UPDATE
) AS T2
WHERE T1.C2 = T2.C2 AND T1.C3 = T2.C3 AND T1.C4 = T2.C4
RETURNING *;
指数C2,C3
上C5分配
表:
C1,C2,C3 - VARCHAR
C4,C5 - 时间戳
不可能用一个非常神秘的查询来回答。使用解释分析来计算postgresql花费的时间。如果您需要解释分析输出的帮助,请将其插入到您的问题中。 – Eelke
无法保证子查询仅为每个目标行返回一个(或零)行。请在尝试优化性能之前先修复您的逻辑。 (如果这是你的意图,那么'order by .. limit 1'是将子查询限制为一行的可怕方法) – joop