【MySQL】多表连接更新(update),使用临时表加快效率
微wx笑 2022-12-04【数据库】 5 0关键字: mysql update
mysql update使用临时表可以提高效率,但是需要注意join语句的使用,left join 的效率非常低,inner join 的效率就很高。
mysql update使用临时表可以提高效率,但是需要注意join语句的使用,left join 的效率非常低,inner join 的效率就很高。
更新语句写法:
UPDATE `equity2` te inner join (SELECT `equity_id`, COUNT(1) ltnum FROM `equity_liutong` WHERE 1 GROUP by `equity_id`) elt on te.id=elt.equity_id set te.ltnum=elt.ltnum
equity2 有7万多条记录,equity_liutong表有40多万条记录
如果语句中的 inner join 改为 left join,大概需要执行10分钟左右;
而 inner join 查询花费 0.6510 秒,连一秒都不到。
试过创建临时表
Create table tmp_equity_liutong(SELECT `equity_id`, COUNT(1) ltnum FROM `equity_liutong` WHERE 1 GROUP by `equity_id`); UPDATE `equity2` te inner join tmp_equity_liutong elt on te.id=elt.equity_id set te.ltnum=elt.ltnum
创建表之后再更新,上面创建表的语句会同时把查询的结果都插入到新创建的表中。
虽然速度很多,但是创建的临时表还需要删除,不如最上面的语句方便。
另外,
mysql是不支持下面这样的语句的:
SELECT `equity_id`, COUNT(1) ltnum into tmp_equity_liutong FROM `equity_liutong`
要用上面 Create table select 的语句代替,这个语句的特点是目标数据表不存在,可以自动创建;
如果已经存在了,就需要使用下面的语句:
INSERT INTO `equity2`(`id`, `name`) select `id`, `name` from `equity` where 1
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/database/2022-12-04/1606.html