为什么导入SQL这么慢?

Lar*_*een 36 mysql linux windows

我有一个包含两个表的SQL文件,共有大约600,000行.昨天,我尝试将文件导入Fedora 16上的MySQL数据库,导入文件需要2个多小时.在我的Windows PC上花了7分钟.我的Linux和Windows机器具有完全相同的硬件.我的几个朋友也试过了,他们有类似的经历.

我们使用的命令是:mysql -u root database_name < sql_file.sql.

为什么速度有这么大的差异?

Dav*_*rtz 68

我敢打赌,Fedora 16正在尊重事务/同步语义而Windows并不是.如果算一算,两小时内600,000次更新是每分钟5,000次.这与磁盘的旋转速率具有相同的数量级.

您可以尝试添加SET autocommit=0;到导入文件的开头并COMMIT;结束.有关更多信息,请参阅此页面.

  • @Prinsig它仅影响断电或系统在操作过程中崩溃的情况.如果您愿意使用干净的数据库重新启动操作(如果发生这种情况),则可以禁用这些安全性. (5认同)
  • 出于好奇,这有什么影响?我假设MySQL的创建者没有无理由地将它放在慢速模式下? (3认同)
  • 当然,你可以使用命令行,如`(echo"SET autocommit = 0"; cat MyInputFile; echo"COMMIT;")| mysql ...` (3认同)
  • 它产生了巨大的变化!刚试了一遍,导入的总时间低于3分钟.坦克很多:) (2认同)
  • SET autocommit=0 后的半列;被省略。完整命令应如下所示:(echo "SET autocommit = 0; "; cat MyInputFile; echo "COMMIT;" ) | mysql... (2认同)

Mah*_*til 6

为什么不导出 .sql 文件作为BULK INSERT选项并导入它,在使用 mysqldump 进行备份时尝试这些选项

--extended-insert: 使用多行插入语句

--quick: 不要缓冲行数据,如果表很大的话很好

注意:max_allowed_packet在生成 .sql 文件之前,确保你应该在 my.cnf 文件中增加=32M 或更多的值。