我正在尝试使用如下编写的 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
我知道已经应用了设置,因为最大文件大小确实发生了变化,这意味着我不必压缩我的文件,我认为这与其他变化相结合,不仅有助于更快地处理 SQL 语句,而且在用完之前它还有两倍的时间;这意味着在脚本超时之前至少会处理两倍的数量,对吗?
但是一点改善都没有。在超时之前,phpmyadmin 仍然只能处理 ~3850 条记录(~850,000 个位置)。
为什么没有改进,是什么限制了处理的语句数量,因为它不是任何 PHP 设置。 phpmyadmin 是否有某种隐藏的限制?
最佳答案
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}
关于导入慢的可能原因,通常是:表已经有很多记录,表上的唯一索引,触发器,服务器慢,连接慢。
关于mysql - 什么限制了 PHP 在超时前执行的 SQL 语句的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46120891/