我读了关于索引的MySQL document,但我不明白这句话:
任何不跨越WHERE子句中所有AND级别的索引都不是 用于优化查询。换句话说,能够使用 index,必须在每个AND组中使用索引的前缀。
这是什么意思?例如,我有一个表A,它有一个索引(index_part1,index_part2,index_part3)。
我在声明下面已经阅读了这些例子,但我仍感到困惑。
答案 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')
子句中没有通用的列集也在索引中。