mysql复合索引是否会使其他索引完全冗余?

时间:2011-02-16 22:30:56

标签: mysql indexing composite-index

如果我在(a,b)上有一个复合索引,我理解只关注'a'的查询仍将使用复合索引(但不是与'b'有关的查询)

我的问题是,如果我有(a,b)索引,是否有任何正当理由在'a'上设置单列索引?我所读过的关于(a,b)索引是否完全替代a或仅仅是“优于无”指数的看法似乎含糊不清。

这假设我通过a和a,b进行过滤。我有一个表太多的索引,这会损害写入性能,并希望在删除索引之前仔细检查,我只是相当肯定没有做任何好事。

此外,这个答案会根据我使用InnoDb还是MyISAM而改变?有关的表格是MyISAM,但我们的大部分表格都是InnoDb。

2 个答案:

答案 0 :(得分:4)

您的(a,b)索引也将处理仅涉及'a'的查询,并且不需要单独使用(a)索引。

来自the documentation

  

如果表格有多列   index,任何最左边的前缀   index可以由优化器使用   找到行。

     

例如,如果你有一个   三列索引(col1,col2,   col3),你有索引搜索   (col1),(col1,col2)上的功能,   和(col1,col2,col3)。

答案 1 :(得分:2)

  

我的问题是,如果我有(a,b)索引,是否有任何正当理由在'a'上设置单列索引?

不,没有理由在(a)上有一个索引(如果你有一个(a,b)