MySQL批量更新10万条数据怎么最快?

如果 10 万条数据进行批量更新该怎么操作呢?我们一起来看看具体可以怎么做。

mysql 批量更新如果一条条去更新效率是相当的慢, 循环一条一条的更新记录,一条记录update一次,这样性能很差,也很容易造成阻塞。

mysql 批量更新共有以下四种办法

1、.replace into 批量更新

replace into test_tbl (id,dr) values (1,'2'),(2,'3'),...(x,'y');

 

2、insert into …on duplicate key update批量更新

insert into test_tbl (id,dr) values (1,'2'),(2,'3'),...(x,'y') on duplicate key update dr=values(dr);

 

3.创建临时表,先更新临时表,然后从临时表中update

create temporary table tmp(id int(4) primary key,dr varchar(50));
insert into tmp values  (0,'gone'), (1,'xx'),...(m,'yy');
update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id;

注意:这种方法需要用户有 temporary 表的 create 权限。

 

4、使用 mysql 自带的语句构建批量更新

mysql 实现批量 可以用点小技巧来实现:

UPDATE tableName
    SET orderId CASE id 
        WHEN THEN 3 
        WHEN THEN 4 
        WHEN THEN 5 
    END
WHERE id IN (1,2,3)

这句 sql 的意思是,更新 orderId 字段,如果id = 1 则 orderId 的值为 3,如果 id = 2 则 orderId 的值为 4……where 部分不影响代码的执行,但是会提高 sql 执行的效率。确保 sql 语句仅执行需要修改的行数,这里只有3条数据进行更新,而 where 子句确保只有 3 行数据执行。如果更新多个值的话,只需要稍加修改:

UPDATE categories 
    SET orderId CASE id 
        WHEN THEN 3 
        WHEN THEN 4 
        WHEN THEN 5 
    END, 
    title CASE id 
        WHEN THEN 'New Title 1'
        WHEN THEN 'New Title 2'
        WHEN THEN 'New Title 3'
    END
WHERE id IN (1,2,3)

到这里,已经完成一条 mysql 更新多条记录了。

根据我的测试,更新 100000 数据的性能就测试结果来看,测试当时使用replace into性能较好。

replace into 和 insert into on duplicate key update 不同在于:replace into 操作本质是对重复的记录先delete 后insert,如果更新的字段不全会将缺失的字段置为缺省值,用这个要悠着点否则不小心清空大量数据可不是闹着玩的。insert into 则是只update重复记录,不会改变其它字段。

posted on 2024-03-05 08:53  数据派  阅读(537)  评论(0编辑  收藏  举报