Pregunta:
Necesito encontrar todos los edificios en un radio de 25 m desde la ubicación dada. Pensé en 2 quires PostGis que pueden manejar esto, cuando lo ejecuto, ambos dan ejecución al mismo tiempo. Pero quiero saber cuál de ellos es la forma más eficiente.
SELECT *
FROM buildings
WHERE
ST_Intersects(ST_Buffer(ST_Transform(ST_GeomFromText('POINT(lon lat)', 4326), 2163), 25), ST_Transform(buildings.geom, 2163));
-----------
SELECT *
FROM buildings
WHERE
ST_DWithin(ST_Transform(ST_GeomFromText('POINT(lon lat)', 4326), 2163), ST_Transform(buildings.geom, 2163), 25);
Respuesta:
Además de lo que ya se dijo:
El problema no es el costo computional de st_transform, sino que eliminará el índice.
Acerca del enfoque st_buffer: no es ST_Intersects lo que es costoso (siempre que tenga un índice de trabajo), es el almacenamiento en búfer.
Entonces, la mejor manera es usar ST_DWithin sin transformación, y asegurarse de que el índice realmente se active. Consulte con Explicar.