有时,我必须为项目重新导入数据,从而将大约360万行读取到MySQL表中(目前是InnoDB,但我实际上并不局限于此引擎)。“加载数据文件...”已经被证明是最快的解决方案,但是它有一个权衡:-当不使用密钥导入时,导入本身需要大约45秒,但密钥创建需要很长时间(已经运行了20分钟...)。-使用表上的键进行导入会使导入速度变慢
表中有超过3个字段的键,引用了数字字段。有什么方法可以加速这一过程吗?
另一个问题是:当我终止启动了一个慢查询的进程时,它继续在数据库上运行。有没有办法在不重启mysqld的情况下终止查询?
非常感谢DBa
发布于 2010-03-24 06:54:24
如果你正在使用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发布于 2010-03-18 03:25:36
这篇博文已经快3年了,但它仍然是相关的,并为优化"LOAD DATA INFILE“的性能提供了一些很好的建议:
http://www.mysqlperformanceblog.com/2007/05/24/predicting-how-long-data-load-would-take/
发布于 2013-03-13 20:23:53
InnoDB是一个相当好的引擎。然而,它高度依赖于“调优”。一件事是,如果您的插入不是按照主键递增的顺序进行的,那么innoDB可能会比MyISAM花费更长的时间。这可以通过设置更高的innodb_buffer_pool_size轻松克服。我的建议是在一台专用的MySQL机器上将其设置为总内存的60-70%。
https://stackoverflow.com/questions/2463602
复制相似问题