2

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

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

4

3 回答 3

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 对于导入大量数据非常有效。

于 2012-06-02T13:58:44.220 回答
0

我推荐离线批处理存储过程选项。这样,您将:

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

rgds。

于 2012-06-02T19:19:24.253 回答
0

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

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

这仅在存储引擎允许事务时才有效。所以最好使用 InnoDB 而不是 MyISAM。

于 2012-06-02T13:47:58.680 回答