MySQL批量update语句优化
来源:互联网 发布:晓军判卷软件下载 编辑:程序博客网 时间:2024/06/03 17:31
对MySQL中的表进行批量update的时候,如果每个记录用一个update语句,5000条记录的话,大概需要30秒钟。下面采用的case when方法可以把5000条update拼成一条:
- Update myTable
- SET myField = CASE id
- WHEN 1 THEN 'value1'
- WHEN 2 THEN 'value2'
- WHEN 3 THEN 'value3'
- END
- WHERE id IN (1,2,3)
具体的MyBatis代码如下:
- <update id="updatePrice" parameterType="java.util.List">
- UPDATE t_price
- SET price = CASE code
- <foreach collection="list" item="item">
- WHEN #{item.code} THEN #{item.price}
- </foreach>
- END
- WHERE
- code in
- <foreach collection="list" item="item" open="(" separator="," close=")">
- #{item.code}
- </foreach>
- </update>
实际上,为了避免一条语句超过MySQL语句的最大长度限制,一般会把5000个数据分成几组,每组拼凑一条语句。因此,Java代码调用MyBatis的dao之前需要拆分被update的List,以避免sql语句超长。比如按1000条每组来拆分,使用Guava的工具类Lists中的partition方法:
- import com.google.common.collect.Lists;
- ......
- List<List<Map<String, Object>>> list = (List<List<Map<String, Object>>>) Lists.partition(orders, 1000);
- int success = 0;
- for (List<Map<String, Object>> l : list) {
- success += priceDao.updatePrice(l);
- }
这样优化后,原来的5000条update语句,就被合并成了5条,执行时间缩短到了2秒钟以内。
转载自:http://blog.csdn.net/clementad/article/details/50083703
阅读全文
0 0
- MySQL批量update语句优化
- mysql批量update语句优化
- MySQL批量update语句优化
- mysql批量更新语句优化
- Oracle的update语句优化研究 批量更新
- sql批量update语句
- mysql 批量更新语句 INSERT ON DUPLICATE KEY UPDATE
- mysql 批量执行update语句最佳方案思考
- mysql 批量update
- mysql mybatis 批量update
- mysql批量update
- mybatis批量update(mysql)
- mybatis批量update(mysql)
- Mybatis学习--批量update语句
- ssm中批量update语句
- PHP连接MySQL数据库;mysql中update批量修改与替换语句
- MYSQL UPDATE语句
- MYSQL UPDATE语句
- windows下配置Heritrix1.14.4安装配置
- android优雅的解决列表嵌套 类似订单列表这种
- iOS用UIBezierPath给控件削圆角
- cogs2783alone
- SQL Server XML(For Xml Path、Raw/Auto、explicit、XPah、Xquery xml查询.value(),exists(),nodes())
- MySQL批量update语句优化
- OkHttp的基本使用以及二次封装
- 利用poi从jsp页面导出报表到excel
- PX4自主飞行
- Tensorflow 交叉熵的表达
- MySQL数据库锁介绍
- 什么群控软件比较好?怎么选群控软件
- STM32 SD卡 记录传感器数据
- ZooKeeper初探