Oracle官方文档翻译《Database Concepts 23ai》第5章-索引和索引组织表-B树索引概述(4)

本文详细介绍了Oracle数据库中的B-Tree索引,包括反向键索引的原理与优势,以及升序和降序索引的使用场景。特别强调了反向键索引如何解决B树索引争用问题和索引范围扫描查询的局限。
摘要由CSDN通过智能技术生成

5 Indexes and Index-Organized Tables

Overview of B-Tree Indexes

Reverse Key Indexes

反向键索引

反向键索引是一种B树索引类型,它在保持列顺序的同时物理上反转每个索引键的字节。

举例来说,如果索引键是 20,在标准 B 树索引中以十六进制存储的两个字节为 C1,15,那么反向键索引将以 15,C1 的形式存储这些字节。

反转键的操作解决了 B 树索引右侧叶块争用的问题。在 Oracle 真正应用集群(Oracle RAC)数据库中多个实例会反复修改同一个块,这个问题可能尤为严重。举例来说,在一个订单表中,订单的主键是连续的。集群中的一个实例添加订单 20,而另一个实例添加 21,每个实例都将其键写入索引右侧的同一个叶块中。

在反向键索引中,对字节顺序反转,使插入操作分散到索引中的所有叶键上。例如,在标准键索引中本应相邻的键 20 和 21,现在存储在相隔很远的独立的块中。这样,顺序键插入的I/O 操作被更均匀地分布。

由于索引中的数据在存储时不是按列键排序的,在某些情况下,反向键格式失去了运行索引范围扫描查询的能力。例如,如果用户发出一个查询,要求订单 ID 大于 20,但数据库无法从包含这个 ID 的块开始,然后沿着叶块水平推进。

Ascending and Descending Indexes

升序和降序索引

在升序索引中,Oracle数据库按升序存储数据。默认情况下,字符数据按照值中每个字节中包含的二进制值排序,数值数据按照最小到最大排序,日期数据按照最早到最晚排序。

举一个升序索引的例子,考虑以下 SQL 语句:

CREATE INDEX emp_deptid_ix ON hr.employees(department_id);

Oracle 数据库对 hr.employees 表按照 department_id 列排序。它从 0 开始,按照 department_id 和对应的 rowid 值的升序加载升序索引。当使用该索引时,Oracle 数据库搜索已排序的 department_id 值,并使用对应的 rowid 来定位包含有请求的 department_id 值的行。

通过在 CREATE INDEX 语句中指定 DESC 关键字,您可以创建降序索引。在这种情况下,索引按照指定的一列或多列的降序存储数据。如果在表 5-3中employees.department_id 列上的索引是降序,那么包含 250 的叶块将位于树的左侧,而包含 0 的块将位于右侧。通过降序索引的默认搜索是从最高值到最低值。

当查询对一些列进行升序排序,而另一些列进行降序排序时,降序索引非常有用。例如,假设您按照以下方式在 last_name 和 department_id 列上创建一个复合索引:

CREATE INDEX emp_name_dpt_ix ON hr.employees(last_name ASC, department_id DESC);

如果一个用户按照姓氏升序(A 到 Z)和部门 ID 降序(从高到低)查询 hr.employees,则数据库可以使用此索引检索数据,而无需额外的排序步骤。

另请参阅:

  • Oracle Database SQL Tuning Guide 了解更多关于升序和降序索引搜索的信息。
  • Oracle Database SQL Language Reference 了解 CREATE INDEX 中 ASC 和 DESC 选项的描述。

往期内容:
Oracle官方文档翻译《Database Concepts 23ai》第5章-索引和索引组织表-B树索引概述(1)

Oracle官方文档翻译《Database Concepts 23ai》第5章-索引和索引组织表-B树索引概述(2)

Oracle官方文档翻译《Database Concepts 23ai》第5章-索引和索引组织表-B树索引概述(3)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值