在 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 投影它预先进行比较所需的所有表达式并存储结果。它不会推迟表达式求值,直到出现平局。