我需要使用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值,我如何回显整个查询,因为它将被插入?
答案 0 :(得分:1)
你经常这样做? 在这种情况下,你会经常这样做(每天一次,一周多次),尝试混合使用"多次插入每行"和"多行插入",所以你连续插入5到10个。
答案 1 :(得分:1)
当您准备一份陈述时,它会被激活一次,并且执行计划已准备就绪。剩下的就是填写数据。由于几个原因,这要好得多,
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查询总是好的。因此,单个大插入更好,因为它将减少数据库交互并节省大量处理时间。