0
点赞
收藏
分享

微信扫一扫

《Oracle Concept》第三章 - 10


背景:

按照《Oracle Conecpt》的结构一起了解Oracle数据库,这是学习Oracle从入门到精通的基础。


本文主题:第三章《Indexes and Index-Organized Tables》 - Overview of Indexes。

键值压缩技术

Oracle能支持使用键值压缩技术对B树索引或者索引组织表中的主键列值部分进行压缩。键值压缩技术能极大降低索引消耗的磁盘空间。

通常,索引键值有两个部分,一个组片段和一个唯一片段。键值压缩会将索引键拆分为一个前缀(组片段)和一个后缀(唯一或者接近唯一的片段)。数据库通过在索引块的后缀项中共享前缀项实现压缩。

注意:

如果键值未定义一个唯一片段,数据库会将rowid追加到组片段中。

默认情况下,唯一索引的前缀会包含除了最后一个外的所有键列,而非唯一索引的前缀则包含了所有的键值列。例如,假设创建了oe.orders表的一个复合索引:

CREATE INDEX orders_mod_stat_ix ON orders ( order_mode, order_status );

在order_mode和order_status列上存在很多重复的值,一个索引数据块可能展示如下,

《Oracle Concept》第三章 - 10_键值

在示例中,键前缀将会包含order_mode和order_status值的组合。如果索引使用默认的键值压缩技术创建,重复的键值前缀,例如(online,0)和(online,2)将会被压缩。理论上,数据库会按照如下格式完成压缩,

《Oracle Concept》第三章 - 10_Database_02

后缀组成了索引行的压缩版本。每个后缀项都会指向一个前缀,存储在相同的索引数据块中。

另外,当创建压缩索引的时候,可以指定前缀的长度。例如,如果指定前缀长度是1,那么前缀就是order_mode,后缀将是order_status,rowid。上例中的值,索引将会分解online重复出现的次数,

《Oracle Concept》第三章 - 10_Database_03

这个索引在每个叶子块中最多只会存储一次指定的前缀。B树索引叶子块中的键值才会被压缩。分支块的键值后缀能被截断,但是不能被压缩。

参考:

1. 《Oracle Database Administrator's Guide》,可以了解如何使用压缩索引。

2. 《Oracle Database VLDB and Partitioning Guide》,可以了解如何使用键值压缩在分区索引上。

3. 《Oracle Database SQL Language Reference》,描述了CREATE INDEX的子句key_compression的使用。

举报

相关推荐

0 条评论