有一个需求,一张表中有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
文章评论