postgres:使用索引时

时间:2017-08-01 12:28:21

标签: sql postgresql indexing

为了更好地理解在哪种情况下索引被正确使用我想列举可能的情况。

我们假设我们有一个带有“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=%

1 个答案:

答案 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子句。仍然需要一种排序。