La seguente query restituisce i luoghi vicino a noi (Lat: 62.0, Lon: 25.0) all'interno cui raggio cadiamo in ordine di distanza:Come riutilizzare i risultati per le clausole SELECT, WHERE e 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))
E 'possibile (e consigliabile) riutilizzare il risultato da earth_distance(ll_to_earth(62.0, 25.0), ll_to_earth(lat, lon))
invece di calcolarlo separatamente per le clausole SELECT, WHERE e ORDER BY?
Penso che se la funzione è contrassegnata come [immutable] (http://www.postgresql.org/docs/9.2/static/xfunc-volatility.html), il risultato verrà riutilizzato. Spero che un esperto di Postgres possa correggermi se sbaglio. –
@MikeChristensen: Sì, è così che di solito funziona. Anche 'STABLE' è sufficiente, perché dichiara la costante di risultato all'interno di una singola istruzione.'IMMUTABLE' è richiesto per affermare risultati costanti anche * tra * transazioni. È necessario che una funzione sia utilizzabile in un indice, ad esempio. –