oracle索引降序和升序,Oracle 降序索引 | 学步园

本文介绍了降序索引的概念,它是Oracle 8i中新增的一种索引类型,通过改变B*Tree索引中列的存储顺序实现降序排列。在特定查询场景下,比如对数据进行降序排序时,降序索引可以消除额外的排序步骤,提高查询效率。创建和使用降序索引需要设置init.ora文件中compatible参数为8.1.0或更高版本。
摘要由CSDN通过智能技术生成

降序索引

降序索引是8i里面新出现的一种索引,是B*Tree的另一个衍生物,它的变化就是列在索引中的储存方式从升序变成了降序,在某些场合下降序索引将会起作用。举个例子,我们来查询一张表并进行排序:

SQL> select * from test where a between 1 and 100 order by a desc,b asc;

已选择100行。

Execution Plan

----------------------------------------------------------

0    SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=100 Bytes=400)

1  0  SORT(ORDER BY)(Cost=2 Card=100 Bytes=400)

2  1 INDEX (RANGE SCAN) OF 'IND_BT' (NON-UNIQUE) (Cost=2 Card=100 Bytes=400)

这里优化器首先选择了一个索引范围扫描,然后还有一个排序的步骤。如果使用了降序索引,排序的过程会被取消。

SQL> create index test.ind_desc on test.testrev(a desc,b asc);

索引已创建。

SQL> analyze index test.ind_desc compute statistics;

索引已分析

再来看下执行路径:

SQL> select * from test where a between 1 and 100 order by a desc,b asc;

已选择100行。

Execution Plan(SQL执行计划,稍后会讲解如何使用)。

----------------------------------------------------------

0    SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=100 Bytes=400)

1  0 INDEX (RANGE SCAN) OF 'IND_DESC' (NON-UNIQUE) (Cost=2 Card=100 Bytes=400)

我们看到排序过程消失了,这是因为创建降序索引时Oracle已经把数据都按降序排好了。

另外一个需要注意的地方是要设置init.ora里面的compatible参数为8.1.0或以上,否则创建时desc关键字将被忽略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值