php - 当您只插入几行时,MySQL 中的单个多个 INSERT 是否会在速度上产生很大差异?

标签 php mysql performance pdo insert

我有一家网店。 用户将一些产品添加到购物车,因此我应该将这些行插入到 order_products 表以及通过几个外键相互连接的 order_products_components 表中。

如您所知,用户通常只添加几种产品,因此是否有必要构造困难的单个多重插入,或者我必须只使用 foreach 循环?

此外,由于我使用外键,因此在每次插入产品后,我需要获取一行主键以将产品组件插入到另一个表中。

那么我可以只使用 foreach 循环插入几次,否则它会降低我的系统速度吗?

最佳答案

我多年来形成的经验法则:“批处理”INSERTs 将速度提高了 10 倍。(当然,“你的里程数可能会有所不同".) INSERT 有开销:它必须被发送到服务器、被解析等。在将 100 行批处理在一起之后,您会得到“ yield 递减”。另一方面,将 5 行批处理在一起只会使您的速度提高大约 3 倍。

如果你对性能要求很高,其他需要关注的事情:

FOREIGN KEY 具有重要的开销——每个 FK 约束实际上是另一个表中的索引查找。

innodb_flush_logs_at_trx_commit -- 1 有利于数据完整性,但速度较差。 (2 更快)将更多内容放入 BEGIN...COMMIT 事务中(在合理范围内)减少“1”的使用。每个事务至少有一个额外的磁盘命中。经验法则:商品磁盘每秒只能处理 100 次点击。

“获取主键”——如果是通过 LAST_INSERT_ID()(或等效方法)获取 `AUTO_INCREMENT 值,那基本上是免费的。

关于php - 当您只插入几行时,MySQL 中的单个多个 INSERT 是否会在速度上产生很大差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29925991/

相关文章:

PHP - 为什么我的幻灯片只读取 1 张图像?

php - mysql 插入突然停止在我的 php 代码中工作

php - 插入/更新脚本根本不更新

php - 将csv导入两个表MYSQL - Codeigniter

Javascript 三维数组与对象字面量

java - 相机只能开一次?

android - 当要求更新 ui 时 TextWatcher 滞后

php - 在 Javascript 中记录按钮 ID

java - 在 AWS 上托管 java 应用程序

php - 如何重置/清除 CodeIgniter 中两个连续查询之间的顺序?