技术分享 | 在MySQL对于批量更新操作的一种优化方式
作者:景云丽、卢浩、宋源栋
本文来源:原创投稿
* GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
引言
批量更新数据,不同于这种 update a=a+1 where pk > 500
,而是需要对每一行进行单独更新 update a=1 where pk=1;update a=12 where pk=7;...
这样连续多行update语句的场景,是少见的。
可以说是偶然也是一种必然,在GreatDB 5.0的开发过程中,我们需要对多语句批量update的场景进行优化。
两种多行更新操作的耗时对比
在我们对表做多行更新的时候通常会遇到以下两种情况
1.单语句批量更新(update a=a+1 where pk > 500
)
2.多语句批量更新(update a=1 where pk=1;update a=12 where pk=7;...
)
下面我们进行实际操作比较两种场景,在更新相同行数时所消耗的时间。
数据准备
数据库版本:MySQL 8.0.23
t1表,建表语句以及准备初始数据1000行
create database if not exists test;use test##建表create table t1(c1 int primary key,c2 int);##创建存储过程用于生成初始数据DROP PROCEDURE IF EXISTS insdata;DELIMITER $$CREATE PROCEDURE insdata(IN beg INT, IN end INT) BEGIN WHILE beg <= end DO INSERT INTO test.t1 values (beg, end);SET beg = beg+1;END WHILE;END $$DELIMITER ;##插入初始数据1000行call insdata(1,1000);