PostGIS 查询耗时过长。 >400毫秒

PostGIS query taking too long. >400ms

Select COUNT(*) from indiahighway_ref where (ST_DWithin(ST_Transform(indiahighway_ref.geom,2163),ST_Transform(ST_GeomFromText('POINT(73.919595 18.5622609)', 4326),2163),500))

时间太长了。我该如何优化它。

您尚未发布解释计划,但我假设您没有转换索引,因此数据库必须在每一行上 运行 ST_Transform。如 manual 中所述,您将要创建它。

CREATE INDEX indiahighway_ref_geom_2163
  ON indiahighway_ref
  USING gist
  (ST_Transform(geom, 1163))
  WHERE geom IS NOT NULL;

我解决了这个问题。我没有必要让它变得复杂。 ST_DWithin 对地理的处理速度更快并且更准确,因此我对地理使用 ST_DWithin 并创建了地理索引以使查询 运行 更快。