分表数据迁移方案

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:19   2721   0

有一个需求,一张表中有1亿条数据,现在要分表处理。数据分离是个麻烦事。以下为本人的解决方案。效率还行。

-- 创建测试表
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
-- 测试数据
INSERT INTO `test`.`user` (`id`, `name`) VALUES ('1', '1');
INSERT INTO `test`.`user` (`id`, `name`) VALUES ('2', '2');
INSERT INTO `test`.`user` (`id`, `name`) VALUES ('3', '3');
INSERT INTO `test`.`user` (`id`, `name`) VALUES ('4', '4');
INSERT INTO `test`.`user` (`id`, `name`) VALUES ('5', '5');
-- 分表1
CREATE TABLE `user_1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

-- 创建存储过程
CREATE  PROCEDURE `insertInit`()
BEGIN
 declare total int(11); -- 总循环次数
 declare idx int(11); -- 当前循环
 declare maxId int(11); -- 每次循环查询条件的最大id
 declare limitNum int(11); -- 分页查询的数据
 set total = 2;
 set idx = 0;
  set maxId= 1;
 set limitNum=1;
  while idx <= total do
     insert into user_1 SELECT * from `user` u where u.id>maxId -- 分表条件
   LIMIT limitNum; -- 每次从最大id取对应的n条数据
     SELECT  max(id) into maxId from user_1; -- 获取当前导入后的maxId
     set idx = idx+1;
  end while;

END


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP