2014-03-13 53 views
0

我有以下查詢:PosgtreSQL優化查詢與st_transform,st_makepoint和st_contains

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

「DestinTable.geom」的原始SRID是什麼?您爲什麼要轉換它? –

+0

請在查詢中使用完全限定的列名稱。 (添加表別名)從你的問題來看,從兩個表中的哪一列來源是不清楚的。 – joop

回答

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