PosgtreSQL使用st_transform,st_makepoint和st_contains优化查询

时间:2014-03-13 03:26:34

标签: postgresql postgis

我有以下查询:

UPDATE  DestinTable
SET  destin = geomVal 
FROM GeomTable
WHERE st_contains(st_transform(geom, 4326), st_setsrid(
      st_makepoint(d_lon::double precision, d_lat::double precision), 4326));

此查询有效,但速度很慢。我必须在一个非常大的表上运行更新,并且需要8个多小时才能完成(我在5个不同的列上运行它)。 我想知道是否有办法优化此查询以使其运行更快。我不知道与st_contains()方法相关的幕后工作,所以可能有一些我遗漏的明显解决方案。

1 个答案:

答案 0 :(得分:0)

最简单的方法是在ST_TRANSFORM

上创建索引
CREATE INDEX idx_geom_4326_geomtable
  ON GeomTable
  USING gist
  (ST_Transform(geom, 26986))
  WHERE geom IS NOT NULL;

如果表中的一个SRID中包含所有字段,那么在该表上创建普通GIST索引并将您提供的点转换为本地SRID将更加容易