我有一张表(natomr),有200条记录,用于定义不同的区域。我想找出包含任意点的区域。这是我的SQL:
SELECT *
FROM natomr
WHERE ST_DWithin(the_geom4326,
ST_geomfromtext('POINT(13.614807 59.684035)', 4326)::geography, 1)
这个查询需要大约1200毫秒,我认为对于这样的小表来说太长了。
我为the_geom4326创建了一个索引,如下所示:
CREATE INDEX natomr_the_geom4326_gist
ON natomr
USING gist
(the_geom4326 );
我还运行 VACUUM FULL 命令,但这没有任何效果。
我该怎么做才能加快查询速度?
答案 0 :(得分:1)
很难判断这是不是出乎意料的是你在这里有什么......可能会有1200MS。
一些潜力:
st_dwithin有一定数量的开销与它相关联......它由3个调用的两个其他函数组成,这些函数完全是contrib库文件(在C中)。所以你的运行时间看起来像处理每条记录的开销+ x秒。尝试将数据扩展一点......在单个查询中尝试10个点。这将使您更好地了解与st_dwithin相关的开销。
形状文件中的多边形有多大?作为一个有趣的测试,尝试定义一个5点多边形,并尝试进行查询以找到该多边形中的一个点。现在定义一个2000点多边形并尝试相同的测试。如果你的200个多边形是2000点或更大,1200MS听起来不太合理,具体取决于机器的功率。