2017-08-03 84 views
0

我想匹配來自兩個表的幾何,並基於匹配更新一個表。但是這需要很長時間。幾何匹配和更新

表1

+-------------+----------+-------------+ 
| Column  | Type  | Modifiers | 
|-------------+----------+-------------| 
| id   | bigint |    | 
| jid   | integer |    | 
| geom  | geometry |    | 
+-------------+----------+-------------+ 
Indexes: 
    "points_geom_gix" gist (geom) 
    "points_jid_idx" btree (jid) 

表2

+----------+----------+------------+ 
| Column | Type  | Modifiers | 
|----------+----------+------------| 
| id  | integer |   | 
| geom  | geometry |   | 
+----------+----------+------------+ 
Indexes: 
    "jxn_geom_idx" gist (geom) 

我試着用波紋管查詢。

UPDATE table1 SET jid = a.id from table2 a WHERE st_equals(geom,a.geom); 

UPDATE table1 SET jid = b.id from table1 as a JOIN table2 b on st_equals(a.geoproperty,b.geom); 

但是,這兩個查詢正在服用的時間(小時),數額巨大。

如果我在兩個表中計算匹配幾何,它會在幾秒鐘內計數。

UPDATE 我使用PostgreSQL 9.5.7和2.2.1的PostGIS

+0

大約有多少記錄你有沒有在表中?你是否注意到其他表的更新性能問題? –

+1

什麼版本的Postgis?你能解釋嗎?包括邊框比較是否加快了速度? 'WHERE geom〜= a.geom AND st_equals(geom,a.geom);' –

+0

我用版本更新了這個問題。 –

回答

0

如果你只需要在邊界幾何列,而不是st_equals,其快速盒水平相比使用「=」。像a.geom = b.geom一樣。

稱此爲好,

Link

+0

邊界框比較是什麼意思? –

+0

表示它將檢查兩個比較幾何的邊界框是否相等。同時檢查「〜=」。 –