0

我在旧的 Windows XP 系统上使用 EasyPHP 12.1 和 MySQL。我有一个 SQL 脚本 (script.sql),其中包含 < 10 个表创建和 > 200,000 个 INSERT INTO 语句。该脚本的结构如下:

SET autocommit = 0;
START TRANSACTION;
USE myDatabase;
...
COMMIT;

其中 ... 是脚本的主体,其中大部分是插入。

我正在使用 mysql -uuser -ppassword < script.sql 运行它。

当我这样做时,插入大约 1/3 的记录需要一个多小时。这不可能是对的,所以我一定做错了什么——但是什么?你能看出这个脚本有什么问题吗?此堆栈是否存在任何已知的错误或性能问题?

4

1 回答 1

0

评论中没有发生一件事。存储引擎会影响数据的存储位置。这也会影响它的存储方式,这导致 MyISAM 在 INSERT 上比 innoDB 慢(由于 myISAM 需要在每次插入时重写完整索引)。

如果您使用的是 MEMORY 引擎,请考虑更改。MEMORY 对临时表很有用——当你关闭服务器时,你会丢失表的内容。MEMORY永远不应该用于永久表。

如果您的数据未编入索引,请考虑使用 InnoDB、MyISAM 或 ARCHIVE。这将显着增加首次创建时间(因为与 MEMORY 不同,MyISAM、INNODB 和 ARCHIVE 都必须写入磁盘并重新生成索引),但这至少意味着您的表不会奇迹般地消失关闭服务器的那一刻。

我强烈建议阅读各种存储引擎,因为它在大多数情况下非常重要。其中也有一些非常非常酷的功能。

于 2012-11-18T17:29:30.087 回答