Php 数据库查询速度

Php 数据库查询速度,php,mysql,performance,optimization,batch-file,Php,Mysql,Performance,Optimization,Batch File,我有一个php脚本,它连续运行几个小时,每隔几秒钟我就有新数据要保存在数据库中。因此,我可以选择在数据可用时存储新数据,或者将它们收集到一个数组中,并在有100或500个数据时保存它们。如果我是正确的,php无法向数据库发送多个insert查询,因此上面的两个选项将花费完全相同的时间来节省 是我错了还是一个比另一个快?也许还有第三种解决方案比这些更快?两者都不会更快。但是,如果使用批量插入并在事务中包装插入,则速度会明显加快 BEGIN TRANSACTION; INSERT INTO ...

我有一个php脚本,它连续运行几个小时,每隔几秒钟我就有新数据要保存在数据库中。因此,我可以选择在数据可用时存储新数据,或者将它们收集到一个数组中,并在有100或500个数据时保存它们。如果我是正确的,php无法向数据库发送多个insert查询,因此上面的两个选项将花费完全相同的时间来节省


是我错了还是一个比另一个快?也许还有第三种解决方案比这些更快?

两者都不会更快。但是,如果使用批量插入并在事务中包装插入,则速度会明显加快

BEGIN TRANSACTION;
INSERT INTO ...
INSERT INTO ...
INSERT INTO ...
COMMIT;

这仅在storange引擎允许事务时才起作用。因此,最好使用InnoDB而不是MyISAM。

您可以使用以下语法一次插入多行:

INSERT INTO foo
( a, b, c)
VALUES
( 1, 2, 3),
( 4, 5, 6),
( 7, 8, 9)

或者,您可以在获取数据时将其转储到一个带分隔符的文件中,当文件中有大约100行时,使用LOAD data INFILE(http://dev.mysql.com/doc/refman/5.5/en/load-data.html)进行插入。我发现加载数据填充对于导入大量数据非常有效。

我建议使用脱机批处理存储过程选项。这样,您将:

  • 以其他方式保存每次脚本调用发生的连接时间(我假设是这样,但我没有看到您的脚本)
  • 节省php和mysql之间的通信时间
  • 保存解析解释,因为所有数据都将在sql引擎中一次性处理

rgds。

只是好奇,您最终使用的是加载数据填充还是多记录插入?多插入。每一秒都是宝贵的,所以我不想浪费时间写一个文件然后再读回来