【发布时间】:2015-09-09 01:09:32
【问题描述】:
我在 where 子句中有一个子查询,每次评估时都会扫描整个表。
SELECT k, j
FROM tab t1
WHERE t1.x > (SELECT AVERAGE(x) FROM tab t2 where t1.n = t2.n)
order by k, j
limit 100;
当我将 OFFSET 0 添加到子查询的末尾时,查询计划没有变化。
SELECT k, j
FROM tab t1
WHERE t1.x > (SELECT AVERAGE(x) FROM tab t2 where t1.n = t2.n OFFSET 0)
order by k, j
limit 100;
参考这个post。优化围栏“OFFSET 0”在这种情况下在 where 子句中不起作用吗?
【问题讨论】:
-
在讨论查询计划时请显示
explain或explain analyze。如果您对查询进行混淆/匿名化,请确保它与查询计划完全匹配。
标签: postgresql indexing subquery inlining