MySQL InnoDB快速索引创建不起作用

时间:2018-04-12 08:07:31

标签: mysql indexing

我有一个InnoDB表,大约有20,000,000条记录,我想在其上添加一些索引。由于我在不同列上对此表有很多查询,我知道在这种情况下多列索引将优于单列。所以我按照Fast Index Creation技术创建了索引,如下所示:

ALTER TABLE mtTBL 
ADD INDEX `index1`  (`col09`,`col03`,`col02`),
ADD INDEX `index2`  (`col09`,`col03`),
ADD INDEX `index3`  (`col09`,`col03`,`col07`),
ADD INDEX `index4`  (`col09`,`col03`,`col12`),
ADD INDEX `index5`  (`col03`),
ADD INDEX `index6`  (`col09`),
ADD INDEX `index7`  (`col09`,`col07`),
ADD INDEX `index8`  (`col09`,`col12`),
ADD INDEX `index9`  (`col09`,`col04`),
ADD INDEX `index10` (`col09`,`col13`),
ADD INDEX `index11` (`col09`,`col06`),
ADD INDEX `index12` (`col09`,`col02`),
ADD INDEX `index13` (`col09`,`col06`,`col08`,`col10`);

但是我看到它需要大约8分钟,类似于我逐个添加索引的时候。那么问题是什么?

2 个答案:

答案 0 :(得分:0)

  • 它似乎等待一个索引在下一个之前完成? (这可能表明快速索引创建只有一个快。)
  • 您使用的是哪个版本的MySQL? (新版本可能会有进一步的改进。)
  • 那是一个太多的"索引。请讨论表格中包含的内容,以及为什么您认为需要这么多索引。 (可能有解决方法。)
  • 如果您将col09作为PRIMARY KEY中的第一列,则可能会有所帮助。 (现在的PK是什么?)
  • 为什么8分钟很重要?你不会每天都在添加索引。
  • 浏览stackoverflow教程,以便获得足够的声誉'回答我的问题。

答案 1 :(得分:-1)

我知道这不能解决您的问题,但您的索引是多余的。索引从左侧读取。所以第一个索引涵盖了下一个索引的所有情况。如果使用 col09 进行选择,则使用第一个索引。 col09、col03 等也一样

添加索引 index1 (col09,col03,col02), 添加索引 index2 (col09,col03), 添加索引 index5 (col03), 添加索引 index6 (col09),