求这个update语句执行顺序以及效率
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么
这个是先执行的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;
效率如何,则建议自己测试一下。
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