DBa*_*DBa 29 mysql indexing performance load-data-infile
有时,我必须为项目重新导入数据,因此在MySQL表中读取大约360万行(目前是InnoDB,但实际上并不仅限于此引擎)."加载数据infile ......"已被证明是最快的解决方案,但它有一个权衡: - 当没有键导入时,导入本身大约需要45秒,但密钥创建需要很长时间(已经运行了20分钟...... ). - 使用表上的键进行导入会导致导入速度变慢
表中有3个字段的键,引用数字字段.有没有办法加速这个?
另一个问题是:当我终止启动慢查询的进程时,它继续在数据库上运行.有没有办法在不重启mysqld的情况下终止查询?
非常感谢DBa
Jon*_*ack 49
如果你正在使用innodb和批量加载这里有一些提示:
将您的csv文件排序为目标表的主键顺序:记住innodb使用群集主键,因此如果它已经排序,它将加载更快!
我使用的典型负载数据infile:
truncate <table>;
set autocommit = 0;
load data infile <path> into table <table>...
commit;
Run Code Online (Sandbox Code Playgroud)
您可以使用其他优化来增加加载时间:
set unique_checks = 0;
set foreign_key_checks = 0;
set sql_log_bin=0;
Run Code Online (Sandbox Code Playgroud)
将csv文件拆分为更小的块
我在散装货物中观察到的典型进口统计数据:
3.5 - 6.5 million rows imported per min
210 - 400 million rows per hour
Run Code Online (Sandbox Code Playgroud)
这篇博文近三年了,但它仍然具有相关性,并且对于优化"LOAD DATA INFILE"的性能有一些很好的建议:
http://www.mysqlperformanceblog.com/2007/05/24/predicting-how-long-data-load-would-take/
归档时间: |
|
查看次数: |
28510 次 |
最近记录: |