MySQL在单个插入中插入20K行

时间:2014-03-04 05:55:38

标签: mysql bulkinsert

在我的表中,我在每个负载上插入大约20,000行。现在我一个接一个地做。从mysql网站我开始知道插入多行与单插入查询更快。

我可以在单个查询中插入所有20000吗?

如果此20000行内有错误会怎样? mysql将如何处理?

3 个答案:

答案 0 :(得分:7)

如果要插入其他表中的行,则可以使用 INSERT ... SELECT 模式插入行。

但是,如果您使用INSERT ... VALUES模式插入值,则您具有max_allowed_pa​​cket的限制。

同样来自文档: -

  

要优化插入速度,请将许多小型操作合并为一个   大手术。理想情况下,您进行单个连接,发送数据   对于许多新行,同时延迟所有索引更新和一致性   检查直到最后。

实施例: -

INSERT INTO `table1` (`column1`, `column2`) VALUES ("d1", "d2"),
                                                 ("d1", "d2"),
                                                 ("d1", "d2"),
                                                 ("d1", "d2"),
                                                 ("d1", "d2");
  

如果这20000行内有错误会怎样?

如果插入记录时出错,则操作将中止。

答案 1 :(得分:3)

http://dev.mysql.com/doc/refman/5.5/en/insert.html

  

使用VALUES语法的INSERT语句可以插入多行。至   执行此操作,包括多个列值列表,每个列值都包含在其中   括号,用逗号分隔。

示例:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

您可以使用代码根据数据源生成插入VALUES部分。

错误:如果INSERT语句中有错误(包括在任何行中),操作将被中止。

生成查询 - 这将基于您的数据源,例如,如果您从PHP中的关联数组中获取数据,您将执行以下操作:

$sql = "INSERT INTO tbl_name (a, b, c) VALUES ";
foreach($dataset as $row)
{
    $sql .= "(" + $row['a'] + ", "  + $row['a'] + ", "  + $row['a'] + ")";
    // OR
    $sql .= "($row[a], $row[b], $row[c])";
}

更多资源:

Optimize MySQL Queries – Fast Inserts With Multiple Rows

The fastest way to insert 100K records

答案 2 :(得分:1)

使用SQL批量插入:插入表(col ... coln)值(col ... coln),(col ... coln)...但SQL长度受限于1M默认值,您可以更改max_allowed_pa​​cket参数支持更大的单个插入