【发布时间】:2018-09-06 22:54:22
【问题描述】:
我在 PostGIS 中使用以下最近邻查询:
SELECT g1.gid g2.gid FROM points as g1, polygons g2
WHERE g1.gid <> g2.gid
ORDER BY g1.gid, ST_Distance(g1.the_geom,g2.the_geom)
LIMIT k;
现在,我已经在两个表的 the_geom 和 gid 列上创建了索引,这个查询比其他涉及空间连接 b/w 两个表的空间查询花费更多的时间。
有没有更好的方法来找到 K 近邻?我正在使用 PostGIS。
而且,尽管在几何列上创建了索引,但花费异常长时间的另一个查询是:
select g1.gid , g2.gid from polygons as g1 , polygons as g2
where st_area(g1.the_geom) > st_area(g2.the_geom) ;
我相信,这些查询并没有从 gist 索引中受益,但为什么呢?
而这个查询:
select a.polyid , sum(length(b.the_geom)) from polygon as a , roads as b
where st_intersects(a.the_geom , b.the_geom);
尽管涉及比多边形或点表大得多的“道路”表,并且还涉及更复杂的空间运算符,但一段时间后返回结果。
【问题讨论】:
-
我假设您的问题是如何加快查询速度?你能告诉我们
EXPLAIN ANALYZE SELECT ....的结果吗?这样我们也许可以知道那里发生了什么。 -
不,我的问题是为什么这个查询所用的时间是上面第三个查询所用时间的 5 倍以上!!
-
好的,在等待了很久之后,对于 IInd 查询,我收到以下错误消息:“查询结果内存不足”并且查询执行终止。有人能解释一下吗?
标签: postgresql postgis indexing nearest-neighbor