ST_DWithin使查询变慢(> 1000ms)

时间:2012-01-26 09:18:38

标签: performance postgis

我有一张表(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 命令,但这没有任何效果。

我该怎么做才能加快查询速度?

1 个答案:

答案 0 :(得分:1)

很难判断这是不是出乎意料的是你在这里有什么......可能会有1200MS。

  • 自动真空可以防止数据包装...对这个小的
  • 表不应该有速度效果
  • 表格几乎太小,索引无法真正有效。

一些潜力:

st_dwithin有一定数量的开销与它相关联......它由3个调用的两个其他函数组成,这些函数完全是contrib库文件(在C中)。所以你的运行时间看起来像处理每条记录的开销+ x秒。尝试将数据扩展一点......在单个查询中尝试10个点。这将使您更好地了解与st_dwithin相关的开销。

形状文件中的多边形有多大?作为一个有趣的测试,尝试定义一个5点多边形,并尝试进行查询以找到该多边形中的一个点。现在定义一个2000点多边形并尝试相同的测试。如果你的200个多边形是2000点或更大,1200MS听起来不太合理,具体取决于机器的功率。