在pdo预处理语句中执行多插入或多个不同插入是更好/更快吗?

时间:2015-10-08 07:48:11

标签: php mysql pdo

我需要使用pdo预处理语句一次将1000-30000行(每个19个元素组成)插入到mysql表中。我问自己,做更多不同的插件或一个大的多插件是否会更好,例如:

INSERT INTO table (a,b,c,...) VALUES (value0a, value0b, value0c,...), (value1a, value1b, value1c,...), ..., (value10000a, value10000b, value10000c,...)

VS执行事务中的每个插入

INSERT INTO table (a,b,c,...) VALUES (value0a, value0b, value0c,...);
INSERT INTO table (a,b,c,...) VALUES (value1a, value1b, value1c,...);
INSERT INTO table (a,b,c,...) VALUES (value2a, value2b, value2c,...);
...
INSERT INTO table (a,b,c,...) VALUES (value10000a, value10000b, value10000c,...);

看起来像多插入更好,所以我必须知道需要插入多少行并为它们创建(?,?,?,...)占位符然后将它们绑定到循环中? 考虑到PDOStatement :: debugDumpParams()没有显示params值,我如何回显整个查询,因为它将被插入?

5 个答案:

答案 0 :(得分:1)

你经常这样做? 在这种情况下,你会经常这样做(每天一次,一周多次),尝试混合使用"多次插入每行"和"多行插入",所以你连续插入5到10个。

答案 1 :(得分:1)

当您准备一份陈述时,它会被激活一次,并且执行计划已准备就绪。剩下的就是填写数据。由于几个原因,这要好得多,

  • Lexing做过一次
  • 执行计划准备就绪
  • 您不会遇到max_packet_size的问题,因为如果您发送批量插入,并且查询很大,MySQL可以拒绝它
  • 在循环中使用这样的语句,提供数据并执行
  • 更容易

速度问题与您的硬盘有关。基本上,如果您开始交易,发出100(或200)个插入,然后commmit交易 - 您将看到速度的巨大增长。这就是我们如何通过花费1个I / O和使用大量磁盘的带宽来实现快速插入速率。

答案 2 :(得分:0)

就在这里:Which is faster: multiple single INSERTs or one multiple-row INSERT?

  

http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

     

插入行所需的时间由以下确定   因素,数字表示大致比例:

    Connecting: (3)
    Sending query to server: (2)
    Parsing query: (2)
    Inserting row: (1 × size of row)
    Inserting indexes: (1 × number of indexes)
    Closing: (1)
     

从这一点来看,显而易见的是,发送一个大的声明会   为每个插入语句节省7的开销,这是进一步的   阅读文字也说:

     

如果您同时从同一客户端插入多行,   使用带有多个VALUES列表的INSERT语句来插入多个   一次排。这速度要快得多(有些速度要快很多倍)   case)比使用单独的单行INSERT语句。

答案 3 :(得分:0)

更快的方式是在表格中插入数据

   INSERT INTO your_tbl
        (a,b,c)
    VALUES
        (value0a,value0b,value0c),
        (value1a,value1a,value1a)

答案 4 :(得分:-1)

尽可能减少SQL查询总是好的。因此,单个大插入更好,因为它将减少数据库交互并节省大量处理时间。