oracle 索引壓縮
oracle 索引壓縮
oracle 索引壓縮(key compression)是oracle 9i 中引入的一項新特性。該特性可以壓縮索引或者索引組織表中的重複鍵值,從而節省儲存空間。非分割槽的unique 索引和non-unique(至少兩列)索引都能夠被壓縮。bitmap 索引不能夠進行壓縮。
在oracle 索引壓縮中有幾個比較糾結的術語,需要說明一下。索引壓縮是透過將索引中的鍵值拆分成兩部分實現的,也就是grouping piece 也稱作prefix 和 unique piece 也稱作suffix 。grouping piece 是用來壓縮的被unique piece 共享的部分。如果鍵值不能提供unique piece,那麼oracle 將會使用rowid 來唯一標識。只有B-tree 索引的葉子節點能夠被壓縮,分支節點不能夠被壓縮。索引壓縮是在單個block 中完成的,不能夠跨blocks進行索引壓縮。grouping piece (prefix) 和 unique piece (suffix) 儲存在同一個索引 block 中。
具體prefix 和 suffix 是怎麼劃分的呢?預設prefix 長度等於索引列的數量減去1。當然我們可以人為控制prefix 的長度,非唯一索引的最大prefix 長度等於索引列的數量。唯一索引的最大prefix 長度等於索引列的數量減去1。比如,假設索引有三個列:
預設的時候:prefix (column1,column2) suffix (column3)
如果有以下幾組鍵值(1,2,3),(1,2,4),(1,2,7),(1,3,5),(1,3,4),(1,4,4) 那麼在prefix中重複的(1,2),(1,3) 將會被壓縮至保留一份。
索引壓縮適合於那些鍵值重複率高的索引,這樣才能夠達到壓縮鍵值,節省儲存空間目的。索引壓縮以後一個索引塊可以存放更多的鍵值,這樣當進行full index scan,full fast index scan 的時候IO效能會更好,但是CPU的負載會增加,至於總體的效能就要看IO效能的提高和CPU負載增加那個是主要方面了。我不認為索引壓縮效能總是提高的,更多的意義在於節省儲存空間,減少IO時間。
SQL> create table objects1 as select object_id,object_name from dba_objects;
Table created.
SQL> create table objects2 as select 100 object_id,object_name from dba_objects;
Table created.
SQL> create table objects3 as select object_id,object_name from dba_objects;
Table created.
SQL> create index objects1_idx on objects1 (object_id) compress 1;
Index created.
SQL> create index objects2_idx on objects2 (object_id) compress 1;
Index created.
SQL> create index objects3_idx on objects3 (object_id);
Index created.--建立一個不壓縮的索引。
SQL> select index_name,compression,leaf_blocks
2 from user_indexes
3 where index_name in ('OBJECTS1_IDX','OBJECTS2_IDX','OBJECTS3_IDX');
INDEX_NAME COMPRESS LEAF_BLOCKS
------------------------------ -------- -----------
OBJECTS1_IDX ENABLED 222
OBJECTS2_IDX ENABLED 112
OBJECTS3_IDX DISABLED 161
我們可以看到對於objects1 和 objects3 因為object_id 都是唯一的,所以沒有壓縮的空間,壓縮以後索引反而佔用了更大的空間,還不如不壓縮。而objects2 中 object_id 都是重複的壓縮效果明顯。
除了建立的時候進行索引壓縮,還可以在rebuild index 的時候指定索引壓縮和解壓縮。
SQL> alter index objects1_idx rebuild nocompress;
Index altered.
SQL> alter index objects1_idx rebuild compress;
Index altered.
注:壓縮也是會引入儲存開銷的,只是很多時候壓縮節省的空間比壓縮需要的儲存開銷更大,所以壓縮以後整體的儲存開銷減小了。
compress 後面接的數字表示的是prefix 的深度,也就是需要用來壓縮的columns 的數量。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28389881/viewspace-1657262/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Index Key Compression索引壓縮OracleIndex索引
- 【實驗】【索引壓縮】索引壓縮演示及優缺點總結索引
- Sqlserver表和索引壓縮SQLServer索引
- ORACLE 壓縮Oracle
- Oracle 12c新特性之:使用高階索引壓縮建立索引Oracle索引
- Oracle表壓縮Oracle
- oracle 表壓縮Oracle
- Oracle壓縮黑科技(一)—基礎表壓縮Oracle
- oracle壓縮表(一)Oracle
- oracle壓縮表(二)Oracle
- oracle 的表壓縮Oracle
- Oracle表的壓縮Oracle
- oracle壓縮技術Oracle
- Oracle資料壓縮Oracle
- Oracle壓縮黑科技(二)—壓縮資料的修改Oracle
- SQL Server 2008 表和索引的行壓縮和頁壓縮SQLServer索引
- Oracle——EXPDP加密和壓縮Oracle加密
- oracle壓縮表表空間Oracle
- Nginx網路壓縮 CSS壓縮 圖片壓縮 JSON壓縮NginxCSSJSON
- JAVA壓縮和解壓縮Java
- zip壓縮和解壓縮
- oracle 壓縮技術(compress)Oracle
- oracle compress壓縮小記Oracle
- ORACLE備份中的壓縮Oracle
- linux壓縮解壓縮Linux
- 字串的壓縮和解壓縮字串
- 檔案壓縮和解壓縮
- JS壓縮方法及批量壓縮JS
- aix 下壓縮與解壓縮AI
- linux壓縮和解壓縮命令Linux
- tar 分卷壓縮&解壓縮命令
- AIX 上壓縮與解壓縮AI
- 《Oracle 複合壓縮索引場景及效能對比》-原理引航-例項演示-可下載Oracle索引
- linux下壓縮解壓縮命令Linux
- linux壓縮和解壓縮命令整理Linux
- 簡單的zip壓縮和解壓縮
- Linux壓縮及解壓縮命令Linux
- linux壓縮和解壓縮命令大全Linux