MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 2790|回复: 4
打印 上一主题 下一主题

两表关联update效率问题

[复制链接]
跳转到指定楼层
1#
发表于 2016-1-21 14:06:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
假设有表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=?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享淘帖 顶 踩
2#
发表于 2016-1-21 14:29:36 | 只看该作者
第二种效率高,但如果修改数据量大,建议分批做。
3#
 楼主| 发表于 2016-1-23 19:16:51 | 只看该作者
nycle 发表于 2016-1-21 14:29
第二种效率高,但如果修改数据量大,建议分批做。

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

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

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-4-30 05:48 , Processed in 0.068926 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表