如何使用连接性能修复 postgresql 更新?

How to fix postgresql update with join performance?

我认为地理空间 table 名为 nodeways.

我想使用空间连接将 ways table 的 end_node_id 列设置为 node table 属性。两个 table 有大约 100K 数据。

update ways
set
    end_node_id = n.node_id
from
    ways w
inner join
    nodes n
on
    st_endpoint(w.shape) = n.shape;

但是这个查询需要很多次。 15 分钟后,我停止了查询。这个操作有性能查询吗?

更新说明:

Update on ways w (cost=0.00..669909619.43 rows=24567397 width=576)  
->  Nested Loop  (cost=0.00..669909619.43 rows=24567397 width=576)
          Join Filter: (st_endpoint(w.shape) = n.shape)
          ->  Seq Scan on ways w (cost=0.00..8960.61 rows=120161 width=564)
          ->  Materialize  (cost=0.00..12200.81 rows=204454 width=52)
                        ->  Seq Scan on nodes n  (cost=0.00..9181.54 rows=204454 width=52)

不要在 from 子句中包含 ways!这不符合您的预期。据推测,你想要:

update ways w
    set end_node_id = n.node_id
from nodes n
where st_endpoint(w.shape) = n.shape;

在您的表述中,update 中的 waysfrom 中的 ways 不同的 引用.因此,您的代码正在创建笛卡尔积——这无疑会减慢处理速度。请注意,这与具有类似语法的 SQL 服务器的行为不同。