1

我正在将数据从文本文件解析到 mysql 数据库。问题是,在解析一定数量的记录(从 250,000 到 380,000 的任何地方)后,我得到Fatal error: Maximum execution time of 30 seconds exceeded. 我可以通过将文件拆分成更小的文件来解决这个问题,但这很痛苦,我想找到一种方法来欺骗 PHP 处理整个文件。

有没有办法说服 PHP 运行冗长的进程,即使我无权访问 php.ini 并且无法更改我的最大执行时间?

顺便说一句,这是我的解析脚本。也许我的 php 代码有问题。

4

1 回答 1

0

您可能会发现一次插入几行可以提高性能。试试这个语法:

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

您应该组合在一起的行数最好通过实验找到。可能是您在一个语句中添加的越多,它就会越快,但如果您没有打开自动提交,同样可能会很慢。

正如有人在评论中提到的那样,一次放入太多可能会耗尽 CPU,并引起服务器管理员的注意。如果这是您需要在主机上小心处理的事情,请一次尝试 200 个,然后usleep在迭代之间尝试少量。

与您的数据库的连接也值得查看 - 这是在同一台服务器上,还是在另一台服务器上?连接可能很慢。添加一些时间,例如,插入 5,000 行需要多长时间,然后尝试看看如何减少它。

这是 ; 的手册参考INSERT请注意,这是非标准 SQL,它不适用于其他数据库引擎。

于 2013-09-18T21:36:01.037 回答