【问题标题】:geometry matching and update几何匹配和更新
【发布时间】:2017-08-03 06:26:36
【问题描述】:

我正在尝试匹配两个表中的几何图形并根据匹配更新一个表。但这需要大量时间。

表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);

但是这两个查询都需要大量时间(小时)。

如果我计算两个表中匹配的几何图形,它将在几秒钟内给出计数。

更新 我正在使用 PostgreSQL 9.5.7 和 Postgis 2.2.1

【问题讨论】:

  • 表中大约有多少条记录?您是否也注意到其他表的更新性能问题?
  • 什么版本的 Postgis?能发帖解释一下吗?包括边界框比较会加快速度吗? WHERE geom ~= a.geom AND st_equals(geom,a.geom);
  • 我用版本更新了问题。

标签: sql postgresql postgis postgresql-9.4


【解决方案1】:

如果您只需要边界框级别比较,请在几何列上使用“=”而不是 st_equals,它很快。比如 a.geom=b.geom。

也参考这个,

Link

【讨论】:

  • 边界框级别比较是什么意思?
  • 表示它将检查两个比较几何的边界框是否相等。还要检查“~=”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多