oracle 11g使用index on mixed order by statement

时间:2016-06-14 12:30:22

标签: oracle oracle11g

创建表格:

  

CREATE TABLE TEST1(   N1 NUMBER,N2 NUMBER,N3 NUMBER);

所以声明如下:

  

从TEST1中选择N3

     

WHERE N1 =:bind

     

OR1 BY N1 ASC,N2 DESC;

在表格中插入一些数据:

  

BEGIN

     

FOR i IN 1..200000

     

LOOP

     

插入TEST1值(

     

ROUND(DBMS_RANDOM.VALUE(1,20000))

     

,ROUND(DBMS_RANDOM.VALUE(1,20000))

     

,ROUND(DBMS_RANDOM.VALUE(1,20000))

     

);

     

END LOOP;

     

END;

现在我有以下索引:

  

在TEST1上创建INDEX IND(N1 ASC,N2 DESC);

     

在TEST1上创建INDEX IND(N1 DESC,N2 ASC);

运行执行计划我注意到降序索引扫描的成本更低。
has same order as in the order by
has reversed order as in the order by

我的问题是:这是一直发生的还是基于表格中的数据? (与索引顺序相比,索引参数总是必须颠倒顺序?

1 个答案:

答案 0 :(得分:0)

在查询中,您没有按顺序使用的列..那么在这种情况下索引不会用于订单。如果您想要真正的测试,您必须按顺序选择所需的列taht / p>

如果订单是ASC或DESC,则成本是相同的,因为(最终)索引访问是相同的。

当你订购索引列或unindex列时,costi是不同的,因为order by的信息是在第一种情况下直接从index获得的,否则必须为表获得..