数据库查询速度

时间:2012-06-02 13:44:56

标签: php mysql performance optimization batch-file

我有一个PHP脚本,它连续运行几个小时,每隔几秒我就有新数据保存在数据库中。所以我可以选择在新数据可用时存储它们或者将它们收集到一个数组中并在我有100或500时保存它们。如果我是正确的php不能向数据库发送多个插入查询,那么上面的两个选项将需要保存的时间完全相同。

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

3 个答案:

答案 0 :(得分:2)

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

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)进行插入。我发现LOAD DATA INFILE对于导入大量数据非常有效。

答案 1 :(得分:0)

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

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

这仅在storange引擎允许交易时才有效。因此,最好使用InnoDB而不是MyISAM。

答案 2 :(得分:0)

我建议使用离线批处理存储过程选项。这样你就会:

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

RGDS。