2017-08-03 7 views
0

2つのテーブルのジオメトリを一致させ、一致に基づいて1つのテーブルを更新しようとしています。しかし、これは膨大な時間を要しています。ジオメトリの照合と更新

表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 あなただけのジオメトリ列の代わりに、ST_Equalsでは、その高速の上のボックスのレベル比較を使用する「=」バウンディング必要であれば、私は、PostgreSQL 9.5.7および2.2.1のPostGIS

+0

、同様にこの参照してください?他のテーブルの更新パフォーマンスの問題も気付いていますか? –

+1

Postgisのどのバージョンですか?あなたは説明を投稿できますか?バウンディングボックスの比較を含めてスピードアップしていますか? 'どこでgeom〜= a.geomとst_equals(geom、a.geom); ' –

+0

私はバージョンで質問を更新しました。 –

答えて

0

を使用しています。 a.geom = b.geomのように。

は、あなたがテーブルに持っているか、約どのように多くのレコード

Link

+0

バウンディングボックスレベルの比較はどういう意味ですか? –

+0

は、2つの比較ジオメトリのバウンディングボックスが等しいかどうかをチェックすることを意味します。また、「〜=」もチェックしてください。 –

関連する問題