在MySQL中以增量插入数百万行的最快方式
我有一个带有一个bigint字段的表。现在我想以增量插入数百万行,因此我提出了以下步骤:在MySQL中以增量插入数百万行的最快方式,mysql,sql,integer,Mysql,Sql,Integer,我有一个带有一个bigint字段的表。现在我想以增量插入数百万行,因此我提出了以下步骤: CREATE PROCEDURE insertMe() BEGIN DECLARE i BIGINT DEFAULT 1; WHILE (i <= 999999999) DO INSERT INTO mytable values(i); SET i=i+1; END WHILE; END; 但是我该如何创建字符串呢?这不会花费太长的时间吗?在事务中运行它,这将产生相同的效果
CREATE PROCEDURE insertMe()
BEGIN
DECLARE i BIGINT DEFAULT 1;
WHILE (i <= 999999999) DO
INSERT INTO mytable values(i);
SET i=i+1;
END WHILE;
END;
但是我该如何创建字符串呢?这不会花费太长的时间吗?在事务中运行它,这将产生相同的效果
CREATE PROCEDURE insertMe()
BEGIN
DECLARE i BIGINT DEFAULT 1;
START TRANSACTIOON;
WHILE (i <= 999999999) DO
INSERT INTO mytable values(i);
SET i=i+1;
END WHILE;
COMMIT;
END;
在事务中运行它,这将具有相同的效果
CREATE PROCEDURE insertMe()
BEGIN
DECLARE i BIGINT DEFAULT 1;
START TRANSACTIOON;
WHILE (i <= 999999999) DO
INSERT INTO mytable values(i);
SET i=i+1;
END WHILE;
COMMIT;
END;
您可以使用自动增量字段。如果您试图在该字段中插入空值,MySQL将为您生成自动编号,因此无需构建1、2、。。。一串尝试一下:
CREATE TABLE seed(column1 BIGINT AUTO_INCREMENT PRIMARY KEY) ENGINE=MyISAM;
-- INSERT ONE ROW TO BEGIN WITH
INSERT INTO seed(column1) VALUES(NULL);
-- RUN THIS QUERY 20 TIMES TO GENERATE 1,048,576 ROWS
INSERT INTO seed(column1)
SELECT NULL
FROM seed;
在MyISAM表上进行20次以上查询的迭代耗时约4.5秒。您可以使用自动增量字段。如果您试图在该字段中插入空值,MySQL将为您生成自动编号,因此无需构建1、2、。。。一串尝试一下:
CREATE TABLE seed(column1 BIGINT AUTO_INCREMENT PRIMARY KEY) ENGINE=MyISAM;
-- INSERT ONE ROW TO BEGIN WITH
INSERT INTO seed(column1) VALUES(NULL);
-- RUN THIS QUERY 20 TIMES TO GENERATE 1,048,576 ROWS
INSERT INTO seed(column1)
SELECT NULL
FROM seed;
上述查询在MyISAM表上的20次迭代耗时约4.5秒。每次调用上述查询时,插入之间都会有间隙,并且调用次数越多,间隙越大,例如1,2,3,4,6,然后7,8,9,13,然后18,19,20,28等等。在批量插入期间,InnoDB生成可能包含间隙的自动增量值。对其进行了描述。解决方案要求您更改MySQL配置,这不是一个可行的选项,因此,我建议您从MyISAM表开始,并在填充数据后将其转换为InnoDB。每次调用上面的表时,插入之间都会有一个间隙,您越频繁地调用它,间隙就越大,例如1,2,3,4,6,然后是7,8,9,13,然后是18,19,20,28等等。在批量插入期间,InnoDB生成可能包含间隙的自动增量值。对其进行了描述。解决方案要求您更改MySQL配置,这不是一个可行的选项,因此我建议您从MyISAM表开始,在填充数据后将其转换为InnoDB。