在 PostgreSQL 中,是否计算了 ORDER BY 子句中的所有表达式?
In PostgreSQL, are all expressions in ORDER BY clause evaluated?
我正在寻找优化我的 PostgreSQL 查询的方法,但在涉及 ORDER BY 的查询计划程序的内部工作中找不到任何内容。
考虑以下 PostgreSQL 查询:
SELECT *
FROM mytable
ORDER BY rank, ST_Distance(geom1, geom2)
是否为 mytable
中的所有行计算了 ST_Distance(geom1, geom2)
,即使 rank
是唯一的?
这是不是 postgis 问题。 ST_Distance(geom1, geom2)
可以是任何需要(昂贵的)计算的表达式。
全部评价。 PostgreSQL 的 sort 投影它预先进行比较所需的所有表达式并存储结果。它不会推迟表达式求值,直到出现平局。
我正在寻找优化我的 PostgreSQL 查询的方法,但在涉及 ORDER BY 的查询计划程序的内部工作中找不到任何内容。
考虑以下 PostgreSQL 查询:
SELECT *
FROM mytable
ORDER BY rank, ST_Distance(geom1, geom2)
是否为 mytable
中的所有行计算了 ST_Distance(geom1, geom2)
,即使 rank
是唯一的?
这是不是 postgis 问题。 ST_Distance(geom1, geom2)
可以是任何需要(昂贵的)计算的表达式。
全部评价。 PostgreSQL 的 sort 投影它预先进行比较所需的所有表达式并存储结果。它不会推迟表达式求值,直到出现平局。