goodbye 发表于 2016-1-21 14:06:43

两表关联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:36

第二种效率高,但如果修改数据量大,建议分批做。

goodbye 发表于 2016-1-23 19:16:51

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

为什么第二种效率高呢

nycle 发表于 2016-2-5 11:25:43

这有个度的问题,举个例子:你要把1000书从地上搬到桌子上,一本本搬肯定效率低,全部一下搬上去搞不定腰闪了~,所以就要分批搬,比如每10本搬一次,这样有效率人又不会太累。DB问题同理。

kidd的诡计 发表于 2016-9-5 19:07:48

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

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

页: [1]
查看完整版本: 两表关联update效率问题