有时,我不得不为一个项目重新导入数据,从而将大约360万行读取到一个mysql表中(目前是innodb,但实际上我并不局限于这个引擎)加载数据填充…“已被证明是最快的解决方案,但它有一个折衷:-当导入没有密钥时,导入本身需要大约45秒,但密钥创建需要时间(已经运行了20分钟…)。-使用表上的键进行导入会使导入速度慢得多
表的3个字段上都有键,引用的是数字字段。有什么办法可以加速这一进程吗?
另一个问题是:当我终止启动缓慢查询的进程时,它会继续在数据库上运行。有没有办法在不重新启动mysqld的情况下终止查询?
非常感谢dba
3条答案
按热度按时间0sgqnhkj1#
如果您使用的是innodb和批量加载,这里有一些提示:
将你的csv文件按目标表的主键顺序排序:记住innodb使用集群主键,所以如果排序的话,加载速度会更快!
我使用的典型负荷数据:
可用于提高加载时间的其他优化:
将csv文件分割成更小的块
我在批量装载期间观察到的典型导入统计:
kcugc4gi2#
这篇博文已经有3年的历史了,但是它仍然是相关的,并且对于优化“加载数据填充”的性能有一些很好的建议:
http://www.mysqlperformanceblog.com/2007/05/24/predicting-how-long-data-load-would-take/
eivnm1vs3#
innodb是个不错的引擎。然而,它高度依赖于被“调整”。有一点是,如果您的插入不是按主键递增的顺序进行的,那么innodb可能会比myisam花费更长的时间。这可以通过设置更高的innodb\u buffer\u pool\u大小来轻松克服。我的建议是在专用mysql机器上将其设置为总ram的60-70%。