为了更好地理解在哪种情况下索引被正确使用我想列举可能的情况。
我们假设我们有一个带有“a”,“b”,“c”,“d”列的表格。
我们在(a,b,c,d)上创建一个索引:
create index my_index on table my_table (a, b, c, d)
在以下情况下使用:
1)
where a=% and b=% and c=% and d=%
2)
where a=% and b=%
3)
where a=%
4)
where b=% and c=% and d=%
5)
where c=% order by b
6)
where a=% and b=% and c=% order by case when d is not null then d else c end
7) 让我们假设现在我们有更多的列为7点,但索引只在(a,b,c,d)上
where a=% and b=% and c=% and d=% and e=% and f=% and g=%
答案 0 :(得分:3)
MySQL非常好documentation解释多列索引。数据库中的规则基本相同(尽管有一些更高级的东西)。
当然,还有其他因素 - 例如from
子句中发生了什么,选择了哪些列,有关表的统计信息等等。
以下是基本指导:
1)where a=% and b=% and c=% and d=%
是的,只要所有条件都是平等的。我不知道整理冲突会发生什么。
2)其中a =%和b =%
是的,只要所有条件都是平等的。我不知道整理冲突会发生什么。
3)其中a =%
是的,只要所有条件都是平等的。我不知道整理冲突会发生什么。
4)其中b =%且c =%且d =%
可能不是。如果使用,则需要扫描索引。如果索引覆盖了查询,则会出现这种情况。
5)其中c =%b by b
可能不是。
6)其中a =%和b =%和c =%依次为d,当d不为null时,则d else c end
应该用于where
子句。仍然需要一种排序。