千家信息网

MySQL NDB如何进行批量更新100万行数据

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇文章为大家展示了MySQL NDB如何进行批量更新100万行数据,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。生产NDB数据库中的一张800多万行的大表需
千家信息网最后更新 2026年11月03日MySQL NDB如何进行批量更新100万行数据

本篇文章为大家展示了MySQL NDB如何进行批量更新100万行数据,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

生产NDB数据库中的一张800多万行的大表需要更新部分字段,为减少对数据库性能的影响,编写了一个存储过程来实现:
1. 导出这张表的主键字段,数据量有100多万条
select MSISDN from TEST where LastAccessTimeStamp=0
into outfile '/tmp/TEST_out.txt' fields terminated by ',' ;

2. 在其中一个SQL节点,创建两张临时表
--创建第一张临时表,用于和生产数据库的源表主键进行关联,以更新部分字段
create table tmp_Subscribers_01(id int not null auto_increment primary key,MSISDN char(20)) engine=innodb;
--向第一张临时表导入之前的导出数据
load data infile '/tmp/Subscribers_out.txt' into table tmp_Subscribers_01 fields terminated by ',' (MSISDN);
--创建第二张临时表,用于记录数据更新的进度
create table tmp_Subscribers_02(id int, MSISDN char(20),cdate datetime) engine=innodb;

3. 编写数据更新的存储过程
drop procedure proc_Subscribers_update;
delimiter $$
create procedure proc_Subscribers_update(IN v_fetch_cnt INT, IN v_sleep_secs INT)
begin
DECLARE v_count INT;
DECLARE v_times INT DEFAULT 1;
DECLARE v_max_value INT;
/*compute the times that the loop runs*/
select ceil(count(MSISDN)/v_fetch_cnt) into v_count from tmp_Subscribers_01;
/*compute the maximum rows that have been already updated*/
WHILE v_times < v_count DO
select ifnull(max(id),0) into v_max_value from tmp_Subscribers_02;
if v_max_value < v_fetch_cnt * v_count then
SET v_times = 1 + floor(v_max_value/v_fetch_cnt);
update TEST s,tmp_Subscribers_01 t set s.LastAccessTimeStamp=1420066800
where s.MSISDN=t.MSISDN and t.id > v_max_value and t.id <= v_fetch_cnt * v_times;
/*record the processing rows*/
insert into tmp_Subscribers_02 select id, MSISDN, now() from tmp_Subscribers_01 where id = v_fetch_cnt * v_times;
select concat('The job',' has already updated ', v_fetch_cnt * v_times, ' rows..') as Info;
select sleep(v_sleep_secs);
end if;
commit;
END WHILE;
select concat('The job',' is ','finished!') as Info;
commit;
end$$
delimiter ;

--执行存储过程
--其中第一个传入参数为每次更新的行数,第二个参数为每次更新后的休眠时间
call proc_Subscribers_update(10000, 2);

上述内容就是MySQL NDB如何进行批量更新100万行数据,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

数据 更新 字段 数据库 过程 存储 内容 参数 技能 知识 部分 生产 简明 简明扼要 万条 就是 性能 文章 时间 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 博彦科技互联网金融 互联网科技产业 美国互联网科技 互联网科技公司的市场部门 上海电发互联网科技有限公司 开启互联网科技时代小说 广州恒生互联网科技有限 浙江互联网科技研学营 互联网科技革命什么开始 移动互联网科技公司 本届互联网博览会上的黑科技 山东有哪些互联网科技公司 21世纪互联网科技成就 张召忠谈中国互联网科技 互联网相关科技技术 有人说阿里系是互联网科技企业 版纳互联网科技选哪家 悟空问答互联网科技 山东蛋芒互联网科技有限公司 互联网科技大佬云集 互联网是第几次科技革命的成果 互联网医疗科技 互联网科技公司发展 互联网科技的未来发展 恒银科技与互联网金融 沐思想互联网科技有限公司 杭州披云加互联网科技有限公司 浙南科技城互联网大厦招聘 山东蛋芒互联网科技有限公司 互联网大会出现的黑科技
0