版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bisal/article/details/100145462
键值压缩技术
Oracle能支持使用键值压缩技术对B树索引或者索引组织表中的主键列值部分进行压缩。键值压缩技术能极大降低索引消耗的磁盘空间。
通常,索引键值有两个部分,一个组片段和一个唯一片段。键值压缩会将索引键拆分为一个前缀(组片段)和一个后缀(唯一或者接近唯一的片段)。数据库通过在索引块的后缀项中共享前缀项实现压缩。
注意:
如果键值未定义一个唯一片段,数据库会将rowid追加到组片段中。
默认情况下,唯一索引的前缀会包含除了最后一个外的所有键列,而非唯一索引的前缀则包含了所有的键值列。例如,假设创建了oe.orders表的一个复合索引:
CREATE INDEX orders_mod_stat_ix ON orders ( order_mode, order_status );
在order_mode和order_status列上存在很多重复的值,一个索引数据块可能展示如下,
在示例中,键前缀将会包含order_mode和order_status值的组合。如果索引使用默认的键值压缩技术创建,重复的键值前缀,例如(online,0)和(online,2)将会被压缩。理论上,数据库会按照如下格式完成压缩,
后缀组成了索引行的压缩版本。每个后缀项都会指向一个前缀,存储在相同的索引数据块中。
另外,当创建压缩索引的时候,可以指定前缀的长度。例如,如果指定前缀长度是1,那么前缀就是order_mode,后缀将是order_status,rowid。上例中的值,索引将会分解online重复出现的次数,
这个索引在每个叶子块中最多只会存储一次指定的前缀。B树索引叶子块中的键值才会被压缩。分支块的键值后缀能被截断,但是不能被压缩。
参考:
1. 《Oracle Database Administrator's Guide》,可以了解如何使用压缩索引。
2. 《Oracle Database VLDB and Partitioning Guide》,可以了解如何使用键值压缩在分区索引上。
3. 《Oracle Database SQL Language Reference》,描述了CREATE INDEX的子句key_compression的使用。