2014-01-12 84 views
0

我有机会以两种方式插入大量数据(每5分钟大约30行):使用MySQL插入多次或1个大查询?

A)使用PHP构建一个插入函数,并且对于每个新数据只需调用该函数并插入30倍

B)使用PHP和通过附加到SQL字符串每个总线建立一个大的查询,然后只能插入一次

哪一个是更有效?

+0

B是。数据库服务器只能处理一个操作。 – suspectus

回答

1

做个别插入或批量插入的问题 - 在这种情况下 - 不应该主要关于性能。任何数据库应该能够处理6个记录/分钟的插入速率。

正如在评论和其他答案中提到的,对数据库的单个调用将需要比多次调用更少的整体时间的。但是,这种批量装载有什么缺点?

是的,有。首先,虽然总体插入需要较少的时间,但这一切都发生在一个时期。所以,表/行被锁定的时间段实际上更长。这种锁定会干扰其他查询。换句话说,大容量装载可能会导致性能偶尔出现问题。

然而,更重要的考虑因素是将数据存储在符合ACID的数据库中。如果应用程序在批量插入前发生故障,会发生什么情况?你愿意接受数据丢失吗?通过单个更新,一旦插入成功完成,就知道每条记录都进入数据库。对于批量更新,您必须接受数据丢失或实施其他机制来阻止数据丢失。

作为一般规则,最好在启动过早优化之前让代码正常工作。由于更新数量仍然很小,我认为这是一个不成熟的优化,单个更新可能是一条可行的路线。

+0

我完全同意你的看法,并希望有人为个别插入提出一个很好的论点。谢谢你的回答! – jskidd3

1

由于数据库调用较少,第二个选项效率更高。

你可以尝试下面的内容。

insert into table imatable values (something, something, something), (somethingelse, somethingelse, somethingelse), (etc, etc, etc)