创建索引然后插入,还是先插入然后创建索引?

时间:2018-11-21 15:32:15

标签: mysql database indexing

我要在Mysql的表中插入大量数据,我需要创建一个索引来快速访问数据,但是,我想知道这两种情况之间是否存在差异(性能) :

  • 创建索引,然后插入所有数据
  • 插入所有数据,然后创建索引

提前谢谢!

1 个答案:

答案 0 :(得分:1)

对于InnoDB存储引擎,对于集群索引,在插入数据之前在表上指定集群索引(即PRIMARY KEY)会更快。

这是因为,如果未在表上定义集群索引(PRIMARY KEY),则InnoDB将为集群索引使用一个隐藏的6字节自动递增计数器。如果以后指定了PRIMARY KEY,则将需要重建整个表。


对于具有InnoDB的二级索引(即非群集索引),通常在未定义二级索引的情况下插入数据,然后在数据加载后构建二级索引会更快。


关注

就装载到表(特别是被截断/清空,然后重新装载的表)的速度而言,删除和重新创建索引是一种加速处理的公知技术,不仅限于MySQL ,但使用其他RDBMS,例如Oracle。)

不能保证处理会更快;与大多数事物数据库一样,我们需要进行测试以确定哪个更快。

对于包含数百万行的表,我们要添加几百行,那么删除和重建索引的速度可能会慢很多,因为要为所有现有行。在插入行时,进行索引维护会更快。

就加快加载速度而言,“删除并重新创建索引”技术不会给我们带来其他变化带来的显着改善。例如,使用LOAD DATA代替INSERT语句,使用多行INSERT语句与一系列单例{{ 1}}语句。