5 Indexes and Index-Organized Tables
Overview of Index-Organized Tables
Index-Organized Table Characteristics
索引组织表特点
索引组织表可以通过在CREATE TABLE语句中添加COMPRESS ADVANCED LOW子句来使用高级低压缩。高级低压缩是一种自适应的前缀压缩形式,它会自动计算每个叶块的最佳前缀列数,从而在块级别实现最佳压缩,无需任何用户干预。这包括在适当情况下不进行任何压缩的可能性。这保证了负压缩不可能发生。观察到更高的压缩比,整体开销几乎可以忽略不计。
在优化器已经确定查询可以作为快速全表扫描执行时,对索引组织表进行的扫描可以被转移到Exadata Smart Scan(智能扫描)。这不需要任何用户干预。在索引组织表叶块上支持全单元侧处理,其中所有感关注的列都存储在叶块中。然而,在某些列存储在溢出段的情况下,智能扫描将不处理这些列,数据库将完成扫描。
图5-3展示了一个索引组织的departments表的结构。叶块包含表行,按主键顺序排列。例如,第一个叶块中的第一个值显示部门ID为20,部门名称为Marketing,经理ID为201,位置ID为1800。
图5-3 索引组织表
示例5-10 索引组织表的扫描
索引组织表将所有数据存储在相同的结构中,不需要存储rowid。如图5-3所示,索引组织表中的叶块1可能包含以下按主键顺序排列的条目:
20,Marketing,201,1800
30,Purchasing,114,1700
索引组织表中的叶块2可能包含以下条目:
50,Shipping,121,1500
60,IT,103,1400
按主键顺序对索引组织表行的扫描,会按以下顺序读取块:
1. Block 1
2. Block 2
示例5-11 堆组织表的扫描
为了对比堆组织表和索引组织表中的数据访问,假设堆组织departments表段的块1包含以下行:
50,Shipping,121,1500
20,Marketing,201,1800
块2包含同一个表的行如下:
30,Purchasing,114,1700
60,IT,103,1400
此堆组织表的B树索引叶块包含以下条目,第一个值是主键,第二个是rowid:
20,AAAPeXAAFAAAAAyAAD
30,AAAPeXAAFAAAAAyAAA
50,AAAPeXAAFAAAAAyAAC
60,AAAPeXAAFAAAAAyAAB
按主键顺序扫描表行会按以下顺序读取表段块:
1. Block 1
2. Block 2
3. Block 1
4. Block 2
因此,在这个例子中,块I/O的数量是索引组织表示例中的两倍。
另请参阅:
- “Table Organization” 了解更多关于堆组织表的信息
- “Introduction to Logical Storage Structures” 了解段和数据块之间的关系
往期内容:
Oracle官方文档翻译《Database Concepts 23ai》第5章-索引和索引组织表-索引组织表概述(1)