相信朋友们来到这里,都被批量更新搞的很烦。因为数据量增大,处理时间甚至可以说指数增长。在mybatis里面用foreach其实效果并不好。当需要更新的数据条数很多时,程序响应会变得非常慢。那我无意中学习到了一种非常小众的写法的语句。但亲身测试之后效果却非常好。出于一些原因就不展示我的代码了,只写一个小的demo供大家参考。
建表语句如下
CREATE TABLE `customer` (
`id` BIGINT(16) NOT NULL AUTO_INCREMENT COMMENT 'id',
`customer_code` VARCHAR(32) DEFAULT NULL COMMENT '客户code',
`customer_name` VARCHAR(64) DEFAULT NULL COMMENT '客户名称',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
表数据如下
批量更新语句如下
UPDATE `customer` cu JOIN
(
SELECT 1 AS id, '10001' AS customer_code, 'kimi' AS customer_name
UNION
SELECT 2 AS id, '10002' AS customer_code, 'max' AS customer_name
UNION
SELECT 3 AS id, '10003' AS customer_code, 'timo' AS customer_name
UNION
SELECT 4 AS id, '10004' AS customer_code, 'checo' AS customer_name
) un USING(id, customer_code)
SET cu.customer_name = un.customer_name;
由于使用的是某云服务器而非公司服务器,语句执行时间0.0几秒
执行后的效果如下
这种方式最牛掰的地方在于。数据量越大,他的性能优势越明显。
拜拜
下面是参考的资料
资料地址,侵删