Die folgende Abfrage gibt die Austragungsorte in der Nähe von uns (lat: 62,0, lon: 25,0) innerhalb dessen Radius fallen wir in nach Entfernung:Wie Ergebnis für SELECT, WHERE und ORDER BY-Klauseln wiederverwenden?
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))
Ist es möglich (und ratsam) aus dem Ergebnis wiederverwenden earth_distance(ll_to_earth(62.0, 25.0), ll_to_earth(lat, lon))
statt separat für SELECT, WHERE und ORDER BY Klauseln zu berechnen?
Ich denke, wenn die Funktion als [unveränderbar] (http://www.postgresql.org/docs/9.2/static/xfunc-volatility.html) markiert ist, wird das Ergebnis wiederverwendet werden. Hoffentlich kann ein Postgres-Experte mich korrigieren, wenn ich falsch liege. –
@MikeChristensen: Ja, so funktioniert es normalerweise. Sogar 'STABLE' ist genug, weil das das Ergebnis in einer einzigen Anweisung als konstant deklariert."IMMUTABLE" ist erforderlich, um selbst zwischen * Transaktionen konstante Ergebnisse zu erzielen. Dies ist erforderlich, damit eine Funktion beispielsweise in einem Index verwendet werden kann. –