Oracle 复合索引最后一列的排序依据

Oracle 复合索引最后一列的排序依据,oracle,Oracle,oracle数据库中有一个关于ColA、colB和colC的复合索引。 查询如下-> where colA = ? and colB is null order by colC 空/非空检查似乎没有命中索引,所以colB没有任何用处,但条件是colA=?命中索引。 但是,如果colB由于空检查而没有用处,colC上的Order by会从上面的复合索引中获得优势吗?A复合索引将所有列作为一个实体索引在一起。它不单独索引每一列。因此,排序顺序将不使用索引。您需要在该列上添加一个索引。谢谢Raci

oracle数据库中有一个关于ColA、colB和colC的复合索引。 查询如下->

where colA = ? and colB is null 
order by colC
空/非空检查似乎没有命中索引,所以colB没有任何用处,但条件是
colA=?
命中索引。
但是,如果colB由于空检查而没有用处,colC上的Order by会从上面的复合索引中获得优势吗?

A复合索引将所有列作为一个实体索引在一起。它不单独索引每一列。因此,排序顺序将不使用索引。您需要在该列上添加一个索引。

谢谢Racil,另一个问题->如果colB从复合索引中删除,那么orderBy子句是否会使用该查询的索引?其次,如果有两个索引——一个在colA上,另一个在ColC上,那么Oracle会使用colA索引作为WHERE条件,还是使用ColC索引作为orderBy或这两个索引中的一个?您应该发布新问题,而不是对同一问题发表评论。还要记住,引擎选择了运行查询的最佳方式,因此,仅仅因为您有索引,并不意味着将使用它。除去感冒没有多大变化。在这两种情况下,Oracle都可以使用复合索引,但必须使用
完全扫描
。在大多数情况下,在单个colC列上添加索引的效果更好。如果创建两个索引,一个用于colA,一个用于colB,那么Oracle将在
WHERE
ORDER BY
中使用它们。