我有一张桌子,上面有一个bigint-field.现在我想用增量插入数百万行,所以我想出了这个过程:
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;
Run Code Online (Sandbox Code Playgroud)
当然这种野兽需要太长时间,所以我通常会做以下事情:
INSERT INTO mytable values(1),(2),(3) etc
Run Code Online (Sandbox Code Playgroud)
但是我如何创建String然后也不会花太长时间?
你可以使用一个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;
Run Code Online (Sandbox Code Playgroud)
在MyISAM表上进行上述查询的20次迭代花了大约4.5秒.