什么限制了PHP在超时之前执行的SQL语句的数量?

时间:2017-09-08 16:25:44

标签: mysql sql phpmyadmin

我正在尝试使用如下所示的SQL语句将大量记录导入到我的表中:

INSERT INTO itemlist(UPC_Case,Pack,Size,Description,Weight_Case,UPC_Retail,TI,HI,MCL,CM,GSC,FL,HAN) VALUES (<values>);

其中很长一段是在名为itemlist insert.sql

的文本文件中

我决定使用phpmyadmin导入这些但是整个文件都不会上传所以我将它拆分并压缩碎片,当我运行导入时它运行了几分钟才达到~3850记录(~850,000个位置)在超时之前,这肯定让我觉得花了太长时间做太少的3850记录似乎是在大约5分钟内处理的非常少量的数据(我的意思是必须是什么,> 1MB?),所以我认为与脚本执行相关的php设置必须设置得太低才能进行这种导入,所以我跟着this post并更改了他们提到的设置:

/etc/php/7.0/apache2/php.ini

post_max_size = 30M (was 8M)
upload_max_filesize = 30M (was 2M)
memory_limit = 1G (was 128M)
max_execution_time = 60 (was 30)
max_input_time = 120 (was 60)

然后我重新启动了apache:sudo systemctl restart apache2

我知道设置已经应用,因为max filesize确实发生了变化,这意味着我不必压缩我的文件,我认为,结合其他更改,将有助于SQL语句不仅可以更快地处理,而且在用完之前会有两倍的时间;这意味着在脚本超时前至少会处理两倍的数量,对吗?

但根本没有改善。在超时之前,phpmyadmin仍然只能通过~3850记录(~850,000个位置)。

为什么没有改进,什么限制了处理的语句数量,因为它不是那些PHP设置中的任何一个。 phpmyadmin有某种隐藏限制吗?

2 个答案:

答案 0 :(得分:2)

PHPMyAdmin不是一个专门用于将大文件导入Mysql的工具。

尝试使用mysql命令行工具。

对于Unix / Mac:

mysql -u {username} -p{password} {database_name} < import_file.sql

对于所有操作系统:

mysql -u {username} -p{password} -e "\. import_file.sql" {database_name}

关于可能导致导入缓慢的原因,它可能是:表已经有很多记录,此表上有唯一索引,触发器,服务器速度慢,连接速度慢。

答案 1 :(得分:1)

值得注意的是,虽然我不知道这是你的问题,MySQL也有超时设置。
如果超过MySQL超时,则查询也将失败。
这是一个stack overflow answer,可以解释你在超时中需要什么。

由于您具有命令行访问权限,并且如果导出的数据是SQL格式,您可以在命令行导入。这种方法可能会回避您遇到的问题(基本上是您run the exported data as a script)。

希望有所帮助!