如何使用连接性能修复 postgresql 更新?
How to fix postgresql update with join performance?
我认为地理空间 table 名为 node
和 ways
.
我想使用空间连接将 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
中的 ways
是 与 from
中的 ways
不同的 引用.因此,您的代码正在创建笛卡尔积——这无疑会减慢处理速度。请注意,这与具有类似语法的 SQL 服务器的行为不同。
我认为地理空间 table 名为 node
和 ways
.
我想使用空间连接将 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
中的 ways
是 与 from
中的 ways
不同的 引用.因此,您的代码正在创建笛卡尔积——这无疑会减慢处理速度。请注意,这与具有类似语法的 SQL 服务器的行为不同。