gpt4 book ai didi

php - 在 pdo 准备好的语句中执行多插入或许多不同的插入更好/更快吗?

转载 作者:可可西里 更新时间:2023-11-01 07:39:09 26 4
gpt4 key购买 nike

我需要使用 pdo 准备语句从 php 一次插入 1000-30000 行(每行由 19 个元素组成)到 mysql 表中。我在问自己是做很多不同的插入还是做一个大的多插入会更好,比如:

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

VS exec 每个插入事务中

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,...);

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

最佳答案

当你准备一条语句时,它会被词法化一次,执行计划就准备好了。剩下的就是填写数据了。由于几个原因,这要好得多

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

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

关于php - 在 pdo 准备好的语句中执行多插入或许多不同的插入更好/更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33009689/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com