我有一张包含一个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然后也不会花太长时间?
答案 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;