MySQL社区

标题: 两表关联update效率问题 [打印本页]

作者: goodbye    时间: 2016-1-21 14:06
标题: 两表关联update效率问题
假设有表A,B, 两者之间的关系为1:1, 即记录数通过ID进行关联
现在需要对表中的记录进行关联update。
利用表A表的条件进行B表的UPDATE,哪种比较有效率:
1 先select ID后,再update
如 select b.id from B b, A a where a.id=b.id and a.cond=?
然后 for key in idList do
update B b set b.c=? where b.id =?
done


2 直接用关联进行update

update B b, A a set b.c=? where b.id=a.id and a.cond=?

作者: nycle    时间: 2016-1-21 14:29
第二种效率高,但如果修改数据量大,建议分批做。
作者: goodbye    时间: 2016-1-23 19:16
nycle 发表于 2016-1-21 14:29
第二种效率高,但如果修改数据量大,建议分批做。

为什么第二种效率高呢

作者: nycle    时间: 2016-2-5 11:25
这有个度的问题,举个例子:你要把1000书从地上搬到桌子上,一本本搬肯定效率低,全部一下搬上去搞不定腰闪了~,所以就要分批搬,比如每10本搬一次,这样有效率人又不会太累。DB问题同理。
作者: kidd的诡计    时间: 2016-9-5 19:07
nycle 发表于 2016-1-21 14:29
第二种效率高,但如果修改数据量大,建议分批做。

我的理解是如果id和conf是个联合索引,id也是各自表的主键,那么应该性能差不多
但是第二种更像是范围查找,位于同一页的或者btree中有相同父节点的id不需要重复走一遍,第一种则是必须根据每个id都使用聚簇索引走一遍,因此大部分情况下应该都是第二种效率高的。






欢迎光临 MySQL社区 (http://www.mysqlpub.com/) Powered by Discuz! X3.2