使用MySQL增量插入数百万行的最快方法

时间:2012-02-07 22:09:49

标签: 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;

当然这只野兽需要太长时间,所以我通常会做以下事情:

INSERT INTO mytable values(1),(2),(3) etc

但是我如何创建String然后也不会花太长时间?

2 个答案:

答案 0 :(得分:8)

您可以使用AUTO_INCREMENT字段。如果您尝试在该字段中插入NULL,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 :(得分:0)

在交易中运行它,这将产生同样的效果。

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;