繁体   English   中英

将1百万条记录插入MySQL数据库

[英]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;

两个建议:

  1. 使用 INSERT DELAYED 手册

    \n

    如果使用DELAYED关键字,则服务器将要插入的行放入缓冲区,然后发出INSERT DELAYED语句的客户端可以立即继续。 如果表正在使用中,则服务器保留行。

    正如@Matt在评论中指出的那样,从MySQL 5.6.6开始, INSERT DELAYED已被弃用。 在5.7中,它被接受但被忽略,并且手册说它将在未来的MySQL版本中被删除。 不要使用它。

  2. 使用交易。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM