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

如何使用连接性能修复postgresql更新?,sql,postgresql,postgis,spatial,spatial-query,Sql,Postgresql,Postgis,Spatial,Spatial Query,我拥有名为节点的地理空间表和方式 我想使用空间连接将end\u node\u id列设置为ways表的node表属性。两个表有大约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

我拥有名为
节点的地理空间表
方式

我想使用空间连接将
end\u node\u id
列设置为
ways
表的
node
表属性。两个表有大约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;

在您的公式中,
更新
中的
方式
与中的
方式
不同。因此,您的代码正在创建笛卡尔积——这无疑会减慢处理速度。请注意,这与SQL Server的行为不同,SQL Server具有类似的语法。

我尝试了此解决方案,但它执行了1个小时,尚未收到任何投诉。@barteloma。我怀疑
节点
相当大。这仍然是在
方式
节点
之间进行笛卡尔积。如果你需要加快速度,你可能需要一些特定的地理索引。我已经用explain更新了这篇文章。但我不太懂你的解释。这两个表都有100K数据和空间索引。总更新时间为2小时10分钟。@barteloma。必须将
方式中的每一行与
节点中的100000行进行比较。唉,这需要一段时间。