当你只插入几行时,MySQL中的单个多重INSERT会给出很大的速度差异吗?

时间:2015-04-28 17:24:00

标签: php mysql performance pdo insert

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

如您所知,用户经常只添加几个产品,因此有必要构建困难的单个多个插件,或者我只需要使用foreach循环吗?

此外,因为我使用外键所以在每个产品插入之后我需要一行主键将产品组件插入到另一个表中。

那么我可以使用foreach循环多次插入,否则会使我的系统变慢?

1 个答案:

答案 0 :(得分:1)

经验法则我多年来一直在发展:“批量”INSERTs因子 10加速事物。(当然,“你的里程可能会有所不同”。) INSERT有开销:必须将其发送到服务器,进行解析,等等。例如,100个行批处理后,您将获得“收益递减”。在频谱的另一端,共同划分的5行将使您仅获得大约3倍的加速。

如果你的表现很紧张,还有其他需要关注的事项:

FOREIGN KEYs有一个非平凡的开销 - 每个FK约束实际上是另一个表中的索引查找。

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

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