【发布时间】:2016-10-15 04:34:42
【问题描述】:
创建表:
创建表测试1( N1 号码,N2 号码,N3 号码);
所以声明如下:
从测试 1 中选择 N3
WHERE N1=:绑定
按 N1 ASC、N2 DESC 排序;
在表格中插入一些数据:
开始
为我输入 1..200000
循环
插入 TEST1 值(
ROUND(DBMS_RANDOM.VALUE(1,20000))
,ROUND(DBMS_RANDOM.VALUE(1,20000))
,ROUND(DBMS_RANDOM.VALUE(1,20000))
);
结束循环;
结束;
现在我有以下索引:
CREATE INDEX IND ON TEST1(N1 ASC,N2 DESC);
CREATE INDEX IND ON TEST1(N1 DESC,N2 ASC);
运行执行计划我注意到降序索引扫描的成本更低。
has same order as in the order by
has reversed order as in the order by
我的问题是:这种情况是一直发生还是基于表中的数据? (与 order by 语句相比,索引参数总是必须按相反的顺序排列?
【问题讨论】:
-
在查询中,您没有按顺序使用的列..那么在这种情况下,索引不用于按顺序排列..如果您想要真正的测试,您必须选择适合您的列需要按顺序
-
它们现在的成本相同。他们中的任何一个仍然“更好”吗?如果我选择未索引的列,为什么成本会有所不同
-
我已经发布了一个简短的分析器希望有用