单表千万级别大数据量更新方案

批量数据更新策略
本文探讨了针对大规模数据库中部分记录的高效更新策略。通过对比三种方法:直接更新、使用replace into及insert into on duplicate key update,得出后者在性能上表现最佳。

生产单表数据5千万,要更新其中5万条数据的其中几个字段。

以下使用开发环境,单表150万,更新5万条左右数据。使用了以下三种方案。

 

1,使用以下语句,批量执行

update table set field1=1,field2=2 where field3=3 and field4=4

执行几秒钟就挂了

 

2,先通过条件将要更新数据查出,使用replace into ,原理先删后插,没有指定值的字段,将会默认为空

replace into t_result_item(item_id,score,recognition_value)

VALUES

<foreach collection="list" item="item" separator="," close=";">

(#{item.itemId},#{item.score},#{item.recognitionValue})

</foreach>

14秒左右 维护索引

 

3,先通过条件将要更新数据查出,使用insert into on duplicate key update ,原理尝试插入,若存在则更新,没有指定值的字段,将会默认为原数据的值

insert into t_result_item(item_id,score,recognition_value)

VALUES

<foreach collection="list" item="item" separator="," close="">

(#{item.itemId},#{item.score},#{item.recognitionValue})

</foreach>

on duplicate key update

score = VALUES(score),

recognition_value = VALUES(recognition_value)

8秒左右

 

使用update语句执行次数太多,太耗性能;replace方案原理是先删后插,此过程会维护索引;insert 方案原理是尝试插入,若存在则更新,不存在再次维护索引,最终使用第三种方案

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/WWWW23223/blog/1790387

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值