首页 > 解决方案 > 搜索表中任意记录 X 距离内的所有记录

问题描述

我有一张桌子,上面有一堆医院的地理位置(大约 100 行),还有一张桌子,上面有一堆其他的地理位置(数万行)。如何选择任何前记录的 X 半径内的所有后记录?

标签: postgresqlpostgis

解决方案


ST_DWithin()从 PostGIS使用:

SELECT *
FROM   whatever w
WHERE  EXISTS (
   SELECT FROM hospital h
   WHERE  ST_DWithin(h.the_geog, w.the_geog, $distance_in_meters)
   );

EXISTS半连接不仅(可能)最快,它还避免了可能来自带有普通 ( OUTER)的类似查询的重复JOIN

你至少应该有这个空间 GiST 索引

CREATE INDEX ON hospital USING gist (the_geog);

有关的:


推荐阅读