我对B树索引感到困惑

时间:2015-11-09 03:38:10

标签: mysql sql

我读了关于索引的MySQL document,但我不明白这句话:

  

任何不跨越WHERE子句中所有AND级别的索引都不是   用于优化查询。换句话说,能够使用   index,必须在每个AND组中使用索引的前缀。

这是什么意思?例如,我有一个表A,它有一个索引(index_part1,index_part2,index_part3)。

我在声明下面已经阅读了这些例子,但我仍感到困惑。

1 个答案:

答案 0 :(得分:2)

这基本上意味着索引可以用于条件由where而不是AND连接的OR子句。因此,a, b上的索引可用于:

where a = 10 and b = 100

但是,如果您将and替换为or,则无法使用。

" span"的概念实质上是指共同的子条款。因此,MySQL可能足够聪明,可以使用索引:

where (a = 10 and b = 100 and c = 'a') or
      (a = 10 and b = 100 and c = 'b')

索引有效,因为它们有一个共同的子条款。

但是,索引不能用于:

where (a = 10 and b = 100 and c = 'a') or
      (a = 10 and c = 'b') or
      (b = 100 and c = 'c')

子句中没有通用的列集也在索引中。