我有以下查询:
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()方法相关的幕后工作,所以可能有一些我遗漏的明显解决方案。
答案 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将更加容易