[英]Inserting 1 Million Records into MySQL Database
我想将100万条记录插入到具有相同值但唯一主键的数据库中。 我不想先将记录写入文件,然后将该文件导入数据库。 请提供一些我可以为此运行的有效查询。
你可以尝试:
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0;
REPEAT
INSERT INTO your_table SELECT NULL, field1, field2;
SET @x = @x + 1;
UNTIL @x > p1 END REPEAT;
END
并使用p1执行此过程作为所需的记录数。
为了清楚SELECT NULL, field1...
:在SELECT NULL, field1...
NULL param用于id字段 ,如果定义为AUTO_INCREMENT PRIMARY KEY
,将自动生成。
使用行生成器: http : //use-the-index-luke.com/blog/2011-07-30/mysql-row-generator#mysql_generator_code
例如,
INSERT INTO table_name
(id, c1,c2,c3,c4)
SELECT gen.n, 1,2,3,4
FROM generator_1m;
两个建议:
使用
INSERT DELAYED
。
从
手册 :
如果使用
DELAYED
关键字,则服务器将要插入的行放入缓冲区,然后发出INSERT DELAYED
语句的客户端可以立即继续。 如果表正在使用中,则服务器保留行。
正如@Matt在评论中指出的那样,从MySQL 5.6.6开始, INSERT DELAYED
已被弃用。 在5.7中,它被接受但被忽略,并且手册说它将在未来的MySQL版本中被删除。 不要使用它。
使用交易。 MySQL将知道在您提交更改之前不需要更新索引。
在mysql中将表主键设置为auto_increment。
我正在向你展示php示例。 按照任何语言的这个简单逻辑来实现。
$a = 150000; // set the count you need
$i=0;
while($i < $a)
{
$name = 'sample';
$segment = "insert into table values
(null,'$name')";
$ss = mysql_query($segment);
echo mysql_error();
$i++;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.