+ -
当前位置:首页 → 问答吧 → 求这个update语句执行顺序以及效率

求这个update语句执行顺序以及效率

时间:2011-12-06

来源:互联网

update a as a set a.damage=(SELECT damage FROM b AS b WHERE b.id = a.id) where a.team_id=28;
这个是先执行的where,出来一个a.team_id=28的临时表,然后join b on b.id = a.id,然后再把damage update到a.damage么

作者: ypfei3345   发布时间: 2011-12-06

引用这个是先执行的where,出来一个a.team_id=28的临时表,然后join b on b.id = a.id,然后再把damage update到a.damage么
不是。
MYSQL的执行顺序是。
1) 打开A表,找到 where a.team_id=28;的记录
2)取出符合条件的一条记录,然后进行 SELECT damage FROM b AS b WHERE b.id = a.id 此时的a.id 是第一条符合条件记录中的ID,
3) 得到值后进行 a.damage= 步骤2中得到的值。
4) 循环至步骤2,直至所有A中符合条件记录更新完毕。

作者: ACMAIN_CHM   发布时间: 2011-12-06

感谢楼上
那这个效率如何
或者有更好的写法么

作者: ypfei3345   发布时间: 2011-12-06

效率和batch是一个数量级的么

作者: ypfei3345   发布时间: 2011-12-06

更常用的写法是
update a inner join b on a.id = b.id set a.damage=b.damage where a.team_id=28;


效率如何,则建议自己测试一下。

作者: ACMAIN_CHM   发布时间: 2011-12-06

多谢,我去测测

作者: ypfei3345   发布时间: 2011-12-06

改起来还真不好改,select里面其实是我简化的,其实里面也是个join

作者: ypfei3345   发布时间: 2011-12-06