2
UPDATE tbl
SET city=s.city_name
FROM shp AS s
WHERE
ST_CONTAINS(s.city_geom,geom);

上記のコードを使用すると、正確な都市を GPS ポイントに追加できます。5,000 万行で約 45 ~ 50 分実行されます。"city" テーブルには、チェックする必要がある約 4000 の都市があります。

特定の国 (1 つの国のみ) に 19 の郡を含む別のシェイプ ファイルがあります。郡をポイントに追加するには、約 1.5 時間かかります。

52 の EU 諸国を含む 3 番目のシェイプ ファイルがあります。同じ SQL クエリでほぼ 25 時間実行されます。

すべてのテーブルには、geom ごとに次のようなインデックスがあります。

CREATE INDEX idx_txt_geom ON txt USING GIST(geom);

Q : チェックするポリゴン数が少ないのになぜこんなに遅いのですか?

説明する 分析する:

Update  (cost=0.00..324.85 rows=1 width=286) (actual time=353.932..353.932 rows=0 loops=1)
  Buffers: shared hit=73090 read=1
  ->  Nested Loop  (cost=0.00..324.85 rows=1 width=286) (actual time=0.544..341.936 rows=471 loops=1)
        Join Filter: _st_contains(s.geom, prob.geom)
        Buffers: shared hit=69985
        ->  Seq Scan on world s  (cost=0.00..83.44 rows=244 width=48) (actual time=0.009..0.319 rows=244 loops=1)
              Buffers: shared hit=81
        ->  Index Scan using idx_prob_geom on prob  (cost=0.00..0.73 rows=1 width=270) (actual time=0.003..0.024 rows=9 loops=244)
              Index Cond: (s.geom && prob.geom)
              Buffers: shared hit=533
Total runtime: 354.640 ms
4

1 に答える 1