我有一家网店。
用户将一些产品添加到购物车中,因此我应该将这些行插入order_products表中,并插入order_products_components表中,order_components表通过几个外键相互连接。
正如您所理解的,用户通常只添加几个产品,所以有必要构造困难的单个多个插入,还是我只需要使用foreach循环?
此外,由于我使用外键,因此在每次产品插入之后,我需要获取一行主键,以便将产品组件插入到另一个表中。
所以我可以只使用foreach循环插入几次,否则会使我的系统变慢吗?

最佳答案

我多年来发展出的一条经验法则是:“批量”使事情加速10倍。(当然,“您的里程数可能会有所不同”。INSERTs有开销:必须将其发送到服务器,并进行解析等。例如,在将100行数据批处理在一起之后,您将得到“递减返回”。在频谱的另一端,5行数据混合在一起只会使您的速度提高大约3倍。
如果你对表演要求很高,还有其他需要注意的事情:
INSERT有一个非常重要的开销——每个FK约束实际上是另一个表中的索引查找。
FOREIGN KEYs--1有利于数据完整性,但速度较差。(2更快)在innodb_flush_logs_at_trx_commit..BEGIN事务中放入更多内容(在合理范围内)可以减少“1”的使用。每个事务至少有一个额外的磁盘命中。经验法则:一个商品磁盘每秒只能处理100次点击。
“Get the primary key”--如果是通过COMMIT(或等效方法)来获取“AUTO_INCREMENT value”,那么它本质上是自由的。

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

10-12 01:27
查看更多