我有一个名为global_points的示例表,其中包含随机地理点的500万条记录。
我已使用CREATE INDEX global_points_gix ON public.global_points USING gist (location);
我通过polygon执行地理(非几何)搜索:
SELECT count(*) from global_points
WHERE ST_DWithin(location, 'SRID=4326; POLYGON((0 0, 50 0, 50 50, 0 0))', 0);
在我的电脑上执行此查询大约需要30秒(硬盘,2核2.8GHz,8GB内存)。
我尝试了一些技巧(例如将多边形定义放在一个单独的表中:
SELECT count(*)
FROM global_points a , polygons b
WHERE ST_DWithin(b.location,a.location ,5e-05) and b.id=2;
但这没有显着的性能提升。
我也在没有索引的情况下在表上执行了这个搜索,但是再次对上面的多边形表没有区别。对于较小的索引多边形表,查询更快。
可以做任何其他事情来提高性能吗?我知道地理搜索很复杂,但索引应该可以提高搜索速度。