繁体   English   中英

更新多个记录-性能不佳

[英]Updating multiple records - poor performance

我想知道为什么要使用postgres永远执行下面的语句:

UPDATE left_table AS l
SET some_col=r.some_col
FROM right_table AS r
WHERE l.uid=r.uid

两个表在列uid上都有索引(数据类型varchar(50))

这两个表有近500k行。

没有重复的uid -s,所以

目标行不应与其他表中的一行连接在一起

情况并非如此。

而像这样的简单连接

SELECT * FROM  
left_table AS l
INNER JOIN
right_table as r
ON l.uid=r.uid

立即返回(耗时少于1秒),第一个耗时30分钟以上

编辑:

说明的输出

"Update on left_table l  (cost=37989.79..575033.10 rows=484302 width=4270)"
"  ->  Hash Join  (cost=37989.79..575033.10 rows=484302 width=4270)"
"        Hash Cond: ((l.uid)::text = (r.uid)::text)"
"        ->  Seq Scan on left_table l  (cost=0.00..17307.02 rows=484302 width=4261)"
"        ->  Hash  (cost=27679.02..27679.02 rows=484302 width=47)"
"              ->  Seq Scan on right_table r  (cost=0.00..27679.02 rows=484302 width=47)"

因此,我对简化的数据集进行了EXPLAIN ANALYZE分析 ,结果发现我在触发器上做的事情很昂贵。 因此, 遇到类似问题的任何人都请记住: EXPLAIN ANALYZE是您的朋友

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM