下面的查詢返回在我們附近的場地(緯度:25.0:62.0,經度)內,其半徑我們墜入按距離排序:如何重新使用SELECT,WHERE和ORDER BY子句的結果?
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](http://www.postgresql.org/docs/9.2/static/xfunc-volatility.html),結果將被重新使用。希望Postgres專家能糾正我,如果我錯了。 –
@MikeChristensen:是的,這就是它通常的工作原理。即使'STABLE'也足夠了,因爲它在單個語句中聲明瞭結果常量。* IMMUTABLE'需要在*事務之間聲明不變的結果。例如,這需要一個函數在索引中可用。 –