[英]postgres: when index is used
为了更好地了解在哪种情况下正确使用了索引,我想列举一些可能的情况。
假设我们有一个包含“ 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=%
MySQL有很好的文档说明了多列索引。 规则在数据库之间基本相同(尽管有一些更高级的东西)。
当然,还有其他因素-例如from
子句中发生的情况,选择了哪些列,有关表的统计信息等等。
以下是基本指导:
1) where a=% and b=% and c=% and d=%
是的,只要所有条件都是平等的。 我不知道排序规则冲突会怎样。
2)其中a =%,b =%
是的,只要所有条件都是平等的。 我不知道排序规则冲突会怎样。
3)其中a =%
是的,只要所有条件都是平等的。 我不知道排序规则冲突会怎样。
4)其中b =%,c =%和d =%
可能不是。 如果使用索引,则需要对其进行扫描。 如果索引覆盖了查询,就会是这种情况。
5)其中c = b的%阶
可能不是。
6)其中,当d不为null时,a =%且b =%且c =%依次排序,则d else c结束
应该用于where
子句。 仍然需要某种排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.