oracle--压缩

来源:互联网 发布:Ubuntu matlab安装教程 编辑:程序博客网 时间:2024/05/07 12:33

 一:data block compression

ORACLE数据库使用table compression来消除数据块中的重复值。

原理:简单来说,就是在数据块的开始保存了一个symbol table以存储数据块中重复的行和列的信息,然后在行中只会用这些symbol来标识这些重复的行和列的信息。如下图:


压缩前的数据:


压缩后的数据:


二:key compression

key compression是用来压缩索引的leaf block。而branch block可以被truncate,但不可以被压缩。

原理:每个索引键都包含两部分的内容:grouping piece和unique piece,进行压缩后其两部分分别对应为prefix entry和suffix entry。可以在创建索引的时候指定prefix length的值。

假如一个索引键为“online,0,AAAPvCAAFAAAAFaAAa”,其grouping piece为“online,0”(建立索引的列),而suffix entry为“AAAPvCAAFAAAAFaAAa”(ROWID)。对该索引键压缩后,假如grouping piece有重复的几行,则压缩后只会保留一个grouping piece,这就是prefix entry,而不相同的这些rowid就是suffix entry。具体如下:

压缩前:


压缩后(部分):


压缩后(prefix length为1):


三:table compression

table compression可以降低储存空间、内存的使用,有时还可以加快查询的执行

table compression分为两种类型:

1、Basic and OLTP Table Compression

这两种都是基于数据字典的,其对于堆表具有很好的压缩比率。其采用的是row-major format,也就是同一行的数据全部保存在一起,然后接着下一行。从数据块级别来理解,也就是之前第一点中所说的data block compression。这两种可以在表空间、表、分区、子分区这几个级别中进行定义。压缩之后的数据块跟普通的数据块差不多。

Basic compression

这种类型的压缩主要用于数据的批量加载操作,只用使用direct path load、alter table....move和online redefination来实现basic compression.这种压缩类型不会对conventional DML操作的数据进行压缩。实现语句为....COMPRESS BASIC;

OLTP table compression:

这种数据类型的压缩主要用于OLTP,也就是conventional DML操作的数据进行压缩。实现语句为.....COMPRESS FOR OLTPCOMPRESS;

2、Hybrid Columnar Compression

Hybrid Columnar Compression所采用的不是row-major format,而是both row and columnar methods,其会把一组数据行中相同的列保存在一起。Hybrid Columnar Compression采用了一种叫Compression Units的逻辑结构,其将相同的列值存储在一起,然后根据列的类型、列的基数以及用户选择的压缩水平来选择算法来对这些列数据进行压缩。如下图:



如上图,每一个compression unit会横跨多个数据块,而特定的列可能会横跨多个数据块。

另外需要注意的是,当锁定Compression Units中的其中一行的时候,会隐式锁定Compression Units中的所有行,因此会降低并发性。

Hybrid Columnar Compression具有两种类型:

1.Warehouse compression

2.Online archival compression

这两种类型需要通过direct path load、alter table....move和online redefination来实现。


---------------------------------------------------------------------------------------------------
如有错误,欢迎指正


技术交流QQ:1732035211
技术交流邮箱:1732035211@qq.com
新浪微博:数据库小菜鸟http://weibo.com/u/3132578390