如何在 Postgis 上更快地进行选择查询
Posted
技术标签:
【中文标题】如何在 Postgis 上更快地进行选择查询【英文标题】:how to make select query faster on Postgis 【发布时间】:2020-04-06 10:37:04 【问题描述】:此查询在圆圈内选择几何_id
select tbl2.geometry_id from geometryTable tbl1
join geometryTable tbl2 on ST_Intersects(ST_Buffer(ST_centroid(tbl1.geometry)::geography, 1000)::geometry, tbl2.geometry)
where tbl1.geometry_id = '112233'
此查询运行良好,但耗时过多,超过 20 秒。我需要使这个查询更快。
【问题讨论】:
请发布EXPLAIN (ANALYZE, BUFFERS) <your query>;
的输出
【参考方案1】:
若要获取位于tbl1
几何中心的1000
米内的tbl2
几何,您可以省略缓冲区创建并使用ST_DWithin
直接依赖距离
select tbl2.geometry_id
from geometryTable tbl1
join geometryTable tbl2
on ST_DWithin(ST_centroid(tbl1.geometry)::geography, tbl2.geometry::geography,1000, true)
where tbl1.geometry_id = '112233';
如果这还不够,您可以在质心地理上创建空间索引
CREATE tl1_centroid_geog ON tbl1 USING GIST(geography(ST_centroid(geometry)));
最终在 tbl2 地理上也是如此
CREATE tl2_geog ON tbl2 USING GIST(geography(geometry));
【讨论】:
【参考方案2】:如果数据很大,您可以添加索引。 请阅读 -tutorialspoint 大致相同。 希望对你有帮助
【讨论】:
以上是关于如何在 Postgis 上更快地进行选择查询的主要内容,如果未能解决你的问题,请参考以下文章
SQL SERVER,使用(TABLOCKX)选择查询会比使用(NOLOCK)更快,反之亦然?