近日,某个业务反映使用LOAD DATA导入数据很慢。后来发现表有主键,于是采用innodb plugin + fast index creation,速度有了相当可观的改进。
时间对比:
| 导入时间 | 创建索引时间 |
buildin直接导入(有主键) | 154.6 min | 0 |
buildin先导入再创建索引 | 13 min | 2 h 16 min 35.64 sec |
plugin先导入再创建索引 | 11min 39s | 8min 27s |
相对于最初的buildin + primary key的情况,plugin + fast index creation有了7倍多的改进。
所以,对于LOAD DATA,开始不要创建主键,导入完成之后,再创建二级索引,在导入和查询之间会取得很好的平衡。
关于fast index creation ,MySQL手册有详细的介绍。另外,关于fast index creation的实现,这篇文章MySQL InnoDB Add Index实现调研已经介绍得比较详细,这里不再赘述。