PHP 将数据导入 mysql 类型的 InnoDB 数据库时超时
PHP times out on importing data into mysql type InnoDB database
我正在开发一个需要自己的 mysql table 的 PHP/mysql 程序,我想包含一个用于 testing/learning 目的的示例数据库。
我想使用 PHP 安装脚本自动创建 mysql table 并插入示例数据库。
mysql 的最新版本现在将引擎类型设置为 InnoDB,我可以使用 PHP 成功创建 mysql 数据库 - 默认为 InnoDB 类型。
当我尝试导入示例数据库(从 csv 文件)时出现问题 - 在 PHP 超时之前,在 1800 条记录中仅导入了 500 条记录。
我想出了一个可能的解决方案。
创建一个 mysql MyISAM 类型的数据库 - 使用 CREATE TABLE $table_name ...... ENGINE=MyISAM
将记录从 csv 文件导入 MyISAM table - 使用 INSERT INTO $table_name ......
最后将数据库类型从 MyISAM 更改为 InnoDB - 使用 ALTER TABLE $table_name ENGINE = InnoDB
这个三步过程运行得更快,并且在 PHP 脚本超时之前完成得很好。
我已经使用 phpmyadmin 检查了 InnoDB table 和数据,一切似乎都正常。
任何人都可以找出这种方法的错误吗?如果可以,您能提供一个简单的解决方案吗?
所有 apache php 和 mysql 安装都会发生这种情况。您需要增加 Apache 最大执行时间才能使 php 将大文件上传到 mysql。
我建议您仔细研究 php.ini 文件并了解其在后端的控制方式。
如果你不做那么多工作,处理会更快。
LOAD DATA INFILE ...
将一步加载整个 CSV 文件,无需您逐行打开+读取+解析+INSERT
每一行。
如果您需要操作任何列,那么这些步骤更通用,但仍然比您的任何一种方法快得多:
CREATE TABLE tmp ... ENGINE=CSV; -- and point to your file
INSERT INTO real_table
SELECT ... the columns, suitably manipulated in SQL
FROM tmp;
没有循环,没有打开,没有解析。
我正在开发一个需要自己的 mysql table 的 PHP/mysql 程序,我想包含一个用于 testing/learning 目的的示例数据库。
我想使用 PHP 安装脚本自动创建 mysql table 并插入示例数据库。
mysql 的最新版本现在将引擎类型设置为 InnoDB,我可以使用 PHP 成功创建 mysql 数据库 - 默认为 InnoDB 类型。
当我尝试导入示例数据库(从 csv 文件)时出现问题 - 在 PHP 超时之前,在 1800 条记录中仅导入了 500 条记录。
我想出了一个可能的解决方案。
创建一个 mysql MyISAM 类型的数据库 - 使用 CREATE TABLE $table_name ...... ENGINE=MyISAM
将记录从 csv 文件导入 MyISAM table - 使用 INSERT INTO $table_name ......
最后将数据库类型从 MyISAM 更改为 InnoDB - 使用 ALTER TABLE $table_name ENGINE = InnoDB
这个三步过程运行得更快,并且在 PHP 脚本超时之前完成得很好。
我已经使用 phpmyadmin 检查了 InnoDB table 和数据,一切似乎都正常。
任何人都可以找出这种方法的错误吗?如果可以,您能提供一个简单的解决方案吗?
所有 apache php 和 mysql 安装都会发生这种情况。您需要增加 Apache 最大执行时间才能使 php 将大文件上传到 mysql。
我建议您仔细研究 php.ini 文件并了解其在后端的控制方式。
如果你不做那么多工作,处理会更快。
LOAD DATA INFILE ...
将一步加载整个 CSV 文件,无需您逐行打开+读取+解析+INSERT
每一行。
如果您需要操作任何列,那么这些步骤更通用,但仍然比您的任何一种方法快得多:
CREATE TABLE tmp ... ENGINE=CSV; -- and point to your file
INSERT INTO real_table
SELECT ... the columns, suitably manipulated in SQL
FROM tmp;
没有循环,没有打开,没有解析。