【发布时间】:2016-01-17 11:09:04
【问题描述】:
我正在开发一个需要自己的 mysql 表的 PHP/mysql 程序,并且我想包含一个示例数据库以用于测试/学习目的。
我想使用 PHP 安装脚本来自动创建 mysql 表并插入示例数据库。
最新版本的 mysql 现在将引擎类型设置为 InnoDB,我可以使用 PHP 成功创建 mysql 数据库 - 默认为 InnoDB 类型。
当我尝试导入示例数据库(从 csv 文件)时出现问题 - 在 PHP 超时之前,1800 条记录中只有 500 条记录被导入。
我想出了一个可能的解决方案。
使用 MyISAM 类型创建 mysql 数据库 - 使用 CREATE TABLE $table_name ...... ENGINE=MyISAM
将 csv 文件中的记录导入 MyISAM 表 - 使用 INSERT INTO $table_name ......
最后将数据库类型从 MyISAM 更改为 InnoDB - 使用 ALTER TABLE $table_name ENGINE = InnoDB
这三步过程运行得更快,并且在 PHP 脚本超时之前完成。
我已经使用 phpmyadmin 检查了 InnoDB 表和数据,一切似乎都正常。
谁能找到这个方法的错误,如果可以,你能提供一个简单的解决方案。
【问题讨论】:
-
您是否在一个事务中输入了所有行?启动和提交事务是昂贵的,我猜在 innoD?B 上更是如此。尝试在导入之前启动事务,并在完成后提交(您可能希望关闭自动提交)。见php.net/manual/en/mysqli.begin-transaction.php
-
检查
max_execution_timephp.net/manual/en/info.configuration.php#ini.max-execution-time的php设置,不要一一插入,使用:INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); -
建议:切换到
microtime(true)。