【发布时间】:2012-12-14 00:23:12
【问题描述】:
以下查询返回我们附近的场地(纬度:62.0,经度:25.0),我们落入其半径内,按距离排序:
SELECT *,
earth_distance(ll_to_earth(62.0, 25.0),
ll_to_earth(lat, lon)) AS distance
FROM venues
WHERE earth_distance(ll_to_earth(62.0, 25.0), ll_to_earth(lat, lon)) <= radius
ORDER BY earth_distance(ll_to_earth(62.0, 25.0), ll_to_earth(lat, lon))
是否可以(并且建议)重复使用来自earth_distance(ll_to_earth(62.0, 25.0), ll_to_earth(lat, lon)) 的结果,而不是为 SELECT、WHERE 和 ORDER BY 子句单独计算它?
【问题讨论】:
-
我想如果函数标记为immutable,结果会被重用。如果我错了,希望 Postgres 专家能纠正我。
-
@MikeChristensen:是的,它通常是这样工作的。即使
STABLE也足够了,因为它在单个语句中声明了结果常量。IMMUTABLE需要断言恒定的结果,即使是在事务之间。例如,一个函数需要在索引中使用。
标签: sql postgresql select sql-order-by where