如何使用连接性能修复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行进行比较。唉,这需要一段时间。