0%

MySQL插入1000w条数据——SQL语句实现

目的是实现一千万条数据的插入,从网上找到了这种思路:插入5条数据进行初始化后,复制当前表,并向表插入所复制表的所有数据(指数增加)。
进行复制操作的SQL语句:

1
insert into `1KW`(`id`,`name`,`type`) select `id`,`name`,`type` from `1KW`;

循环上面的这段语句21次,即可得到
$$
5\times2^{21}=10485760
$$
行数据

SQL语句如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
CREATE TABLE `1KW`(
`id` INT(11),
`name` VARCHAR(100),
`type` VARCHAR(40)
);
insert into `1KW`(`id`,`name`,`type`) values (1,'1KW','0');
insert into `1KW`(`id`,`name`,`type`) values (1,'1KW','0');
insert into `1KW`(`id`,`name`,`type`) values (1,'1KW','0');
insert into `1KW`(`id`,`name`,`type`) values (1,'1KW','0');
insert into `1KW`(`id`,`name`,`type`) values (1,'1KW','0');
-- 5x2^21=10485760
drop procedure if exists L00P;
create procedure L00P()
begin
declare i int default 1;-- default 是指定该变量的默认值
while i<=21 DO -- 循环开始
insert into `1KW`(`id`,`name`,`type`) select `id`,`name`,`type` from `1KW`;
set i=i+1;
end while; -- 循环结束
set i=i-1;
select i; -- 输出次方
select count(*) from `1kw`; -- 输出行数
end;
-- 执行存储过程
call L00P();
-- 删除存储过程
drop procedure if exists L00P;

执行时间以及行数:

image.png

创建完成的表:

image.png