一尘不染

MySQL加载数据文件-加速?

mysql

有时,我必须重新导入项目的数据,从而将大约360万行读入MySQL表(当前为InnoDB,但实际上我并不局限于此引擎)。事实证明,“加载数据infile
…”是最快的解决方案,但它有一个折衷:-当不使用密钥导入时,导入本身需要大约45秒,但是密钥创建需要一定的时间(已经运行了20分钟。)。
)。-使用表上的键进行导入会大大降低导入速度

在表的3个字段上有键,引用了数字字段。有什么办法可以加速吗?

另一个问题是:当我终止启动慢查询的进程时,该进程将继续在数据库上运行。有什么方法可以在不重新启动mysqld的情况下终止查询?

非常感谢DBa


阅读 240

收藏
2020-05-17

共1个答案

一尘不染

如果您使用的是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
2020-05-17