创建表格:
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
我的问题是:这是一直发生的还是基于表格中的数据? (与索引顺序相比,索引参数总是必须颠倒顺序?
答案 0 :(得分:0)
在查询中,您没有按顺序使用的列..那么在这种情况下索引不会用于订单。如果您想要真正的测试,您必须按顺序选择所需的列taht / p>
如果订单是ASC或DESC,则成本是相同的,因为(最终)索引访问是相同的。
当你订购索引列或unindex列时,costi是不同的,因为order by的信息是在第一种情况下直接从index获得的,否则必须为表获得..