我有一个 php 脚本,它连续运行几个小时,每隔几秒钟我就有新数据要保存在数据库中。所以我可以选择在新数据可用时存储新数据,或者将它们收集到一个数组中,一旦我有 100 或 500 个就保存它们。如果我是正确的,php 不能向数据库发送多个插入查询,所以上面的两个选项将采取节省的时间完全相同。
我错了还是一个比另一个快?也许有比这些更快的第三种解决方案?
我有一个 php 脚本,它连续运行几个小时,每隔几秒钟我就有新数据要保存在数据库中。所以我可以选择在新数据可用时存储新数据,或者将它们收集到一个数组中,一旦我有 100 或 500 个就保存它们。如果我是正确的,php 不能向数据库发送多个插入查询,所以上面的两个选项将采取节省的时间完全相同。
我错了还是一个比另一个快?也许有比这些更快的第三种解决方案?
您可以使用以下语法一次插入多行:
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 对于导入大量数据非常有效。
我推荐离线批处理存储过程选项。这样,您将:
rgds。
两者都不会更快。但是,如果您使用批量插入并将插入包装在事务中,它将明显更快。
BEGIN TRANSACTION;
INSERT INTO ...
INSERT INTO ...
INSERT INTO ...
COMMIT;
这仅在存储引擎允许事务时才有效。所以最好使用 InnoDB 而不是 MyISAM。