有时,我必须重新导入项目的数据,从而将大约360万行读入MySQL表(当前为InnoDB,但实际上我并不局限于此引擎)。事实证明,“加载数据infile …”是最快的解决方案,但它有一个折衷:-当不使用密钥导入时,导入本身需要大约45秒,但是密钥创建需要一定的时间(已经运行了20分钟。)。 )。-使用表上的键进行导入会大大降低导入速度
在表的3个字段上有键,引用了数字字段。有什么办法可以加速吗?
另一个问题是:当我终止启动慢查询的进程时,该进程将继续在数据库上运行。有什么方法可以在不重新启动mysqld的情况下终止查询?
非常感谢DBa
如果您使用的是innodb和批量加载,则这里有一些提示:
将您的csv文件排序为目标表的主键顺序:请记住,innodb使用群集的主键,因此如果排序,它将更快地加载!
我使用的典型加载数据文件:
truncate <table>; set autocommit = 0; load data infile <path> into table <table>... commit;
您可以用来增加加载时间的其他优化:
set unique_checks = 0; set foreign_key_checks = 0; set sql_log_bin=0;
将csv文件分割成较小的块
我在批量加载期间观察到的典型进口统计数据:
3.5 - 6.5 million rows imported per min 210 - 400 million rows per hour