5 Indexes and Index-Organized Tables
Introduction to Indexes
Types of Indexes
索引的类型
Oracle数据库提供了几种索引模式,提供了互补的性能功能。
B-树索引是标准的索引类型。它们非常适用于高度选择性的索引(每个索引条目对应少量的行)和主键索引。作为连接索引使用时,B-tree索引可以检索按照索引列排序的数据。B-树索引具有下表中展示的子类型。
表5-1 B-树索引子类型
B-树索引子类型 | 描述 | 了解更多 |
---|---|---|
索引组织表 | 索引组织表与堆组织表不同之处在于数据本身就是索引。 | “Overview of Index-Organized Tables” |
反向键索引 | 在这种类型的索引中,索引键中的字节被反转了,例如,103被存储为301。反转字节可以将对索引的插入分散到多个数据库块上。 | “Reverse Key Indexes” |
降序索引 | 这种类型的索引按照一个特定列或多列的降序存储数据。 | “Ascending and Descending Indexes” |
B-树簇索引 | 这种类型的索引用于索引表的簇键。这个键不是指向某一行,而是指向包含簇键相关行所在的块。 | “Overview of Indexed Clusters” |
以下表格展示了不使用B-树结构的索引类型。
表5-2 不使用B-树结构的索引
类型 | 描述 | 了解更多 |
---|---|---|
位图和位图连接索引 | 在位图索引中,索引条目使用位图来指向多行。相比之下,B树索引条目指向单行。位图连接索引是用于两个或多个表连接的位图索引。 | “Overview of Bitmap Indexes” |
基于函数的索引 | 这种类型的索引包括通过函数(如UPPER函数)转换的列,或包含在表达式中的列。B树索引或位图索引都可以是基于函数的。 | “Overview of Function-Based Indexes” |
应用程序域索引 | 这种类型的索引是用户为特定应用程序域的中数据创建的。其物理索引不一定需要使用传统的索引结构,可以将其作为表存储在Oracle数据库中,也可以作为文件存储在外部。 | “Overview of Application Domain Indexes” |
另请参阅:
- Oracle Database Administrator’s Guide 了解如何管理索引
- Oracle Database SQL Tuning Guide 了解不同的索引访问路径
How the Database Maintains Indexes
数据库如何维护索引
数据库在索引创建后会自动维护和使用这些索引。
索引会自动反映其基础表的数据更改。更改的示例包括增加、更新和删除行。不需要用户进行操作。
即使插入了行,索引数据的检索性能仍然几乎保持恒定。然而,一张表上如果存在多个索引会降低DML操作的性能,因为数据库还必须更新这些索引。
另请参阅:
- Oracle Database Administrator’s Guide 了解更多关于自动索引的信息
- Oracle Database Licensing Information User Manual 了解不同版本和服务支持哪些特性的详情
Index Storage
索引存储
Oracle数据库将索引数据存储在一个索引段中。
数据块中索引数据的可用空间等于数据块大小减去块开销、条目开销、行标识(rowid),以及每个索引值的一个长度字节。
索引段的表空间可以是所有者的默认表空间,也可以是在CREATE INDEX语句中明确指定的表空间。为了方便管理,您可以将索引存储在与其表不相同的表空间中。例如,您可以选择不备份那些只包含索引的表空间,因为这些可以重建,从而减少备份所需的时间和存储空间。
另请参阅:
- “Overview of Index Blocks” 了解索引块的类型(根、分支和叶),以及索引条目是如何存储在块内部的