mysql 批量更新数据的技巧

时间:2021-07-13 07:24:51

    当在开发的时候有时候需要手动修复数据或者更新数据,一般在自己的项目里写一个main函数对数据读取或者修改即可,但执行的时候要从本地连接外网,

如果数据量很大的时候。几十万或者上百万等以上的话,性能会非常的差,这时候把sql语句写好放在数据库里直接执行会好很多。

   在mysql数据库里的innodb引擎,一般数据增删改都有内置的事务的,而且有默认的超时限制,好像是50s,如果数据量大而且很多连接查询的话会超时, 

   这时候不妨把连接查询的数据创建临时表并对临时表创建索引,然后添加数据或修改数据对临时表进行连接关联,这时候性能会快很多,举个例子:

 DROP TEMPORARY TABLE IF EXISTS tmp;

 CREATE TEMPORARY TABLE tmp
    select b.UserId,b.field1,b.field2, b.field3 from
                    (select Max(AutoId) as AutoId
                    from T_Table2  where UserId
                    group by UserId) a left join T_Table1 b on a.AutoId=b.AutoId;
 ALTER TABLE tmp ADD INDEX `index_UserId` (`UserID` ASC) ;

  INSERT INTO T_Table3(`UserId`,`field1`,`field2`,`field3`, `CreateTime`,`CreateIp`,`ModifyTime`,`ModifyIp`)
    select a.UserId,a.field1,a.field2,a.field3,now(),'127.0.0.1',now(),'127.0.0.1'
    from tmp;

    临时表用完之后要删除,DROP TEMPORARY TABLE tmp;