Chinaunix
標(biāo)題: 壓縮索引(compress index) [打印本頁]
作者: george.ma 時(shí)間: 2011-12-19 13:56
標(biāo)題: 壓縮索引(compress index)
壓縮索引基本介紹
基本語法
create index <index_name> on <table>(column,column...) compress <數(shù)字,并小于等于索引包括的字段值>;
如create index t_objects_idx on t_objects(owner,object_type,object_name) compress 2;即表示壓縮前面的二個(gè)字段
鍵索引(compressed key index)的基本概念是,每個(gè)鍵條目分解為兩個(gè)部分:“前綴”和“后綴”。前綴建立在串聯(lián)索引(concatenated index)的前幾列上,這些列有許多重復(fù)的值。后綴則在索引鍵的后幾列上,這是前綴所在索引條目中的惟一部分(即有區(qū)別的部分)。
將創(chuàng)建一個(gè)表和一個(gè)串聯(lián)索引,并使用ANALYZE INDEX測(cè)量無壓縮時(shí)所用的空間。然后利用索引壓縮創(chuàng)建這個(gè)索引,分別壓縮不同數(shù)目的鍵條目,查看有什么差別:
create table t_objects as select * from all_objects;
create index t_objects_idx on t_objects(owner,object_type,object_name);
analyze index t_idx validate structure;
然后創(chuàng)建一個(gè)INX_STATS表,用來保存INDEX_STATS信息,我們把表中的行標(biāo)記為“未壓縮”(noncompressed):
create table idx_stats as
select 'noncompressed' what, a.* from index_stats a;
drop index t_objects_idx;
create index t_objects_idx on
t_objects(owner,object_type,object_name) --3個(gè)字段
compress &1; ---分別輸入1,2,3
analyze index t_objects_idx validate structure;
insert into idx_stats
select 'compress &2', a.*
from index_stats a;
select what, height, lf_blks, br_blks,
btree_space, opt_cmpr_count, opt_cmpr_pctsave
from idx_stats;
WHAT HEIGHT LF_BLKS BR_BLKS BTREE_SPACE OPT_CMPR_COUNT OPT_CMPR_PCTSAVE
------------- ---------- ---------- ---------- ----------- -------------- ----------------
noncompressed 3 362 3 2920096 2 28
compress 1 3 321 3 2590812 2 19
compress 2 3 258 3 2087064 2 0
compress 3 3 404 3 3254480 2 35
可以看到,COMPRESS 1索引的大小大約是無壓縮索引的89%(通過比較BTREE_SPACE得出)。葉子塊數(shù)大幅度下降。更進(jìn)一步,使用COMPRESS 2時(shí),節(jié)省的幅度更為顯著。所得到的索引大約是原索引(無壓縮索引)的70%,而且由于數(shù)據(jù)量減少,利用列OPT_CMPR_PCTSAVE的信息(這代表最優(yōu)的節(jié)省壓縮百分比(optimum compression percent saved)或期望從壓縮得到的節(jié)省幅度)。我們可以猜測(cè)出COMPRESS 2索引的大小。
注意 對(duì)無壓縮索引執(zhí)行ANALYZE命令時(shí),會(huì)填寫OPT_CMPR_PCTSAVE/OPT_CMPR_COUNT列,并估計(jì)出:利用COMPRESS 2,可以節(jié)省28%的空間;而事實(shí)確實(shí)如此,我們果真節(jié)省了大約這么多的空間。
不過,再看看COMPRESS 3會(huì)怎么樣。如果壓縮3列,所得到的索引實(shí)際上會(huì)更大:是原來索引大小的110%。這是因?yàn)椋好縿h除一個(gè)重復(fù)的前綴,能節(jié)省N個(gè)副本的空間,但是作為壓縮機(jī)制的一部分,這會(huì)在葉子塊上增加4字節(jié)的開銷。把OBJECT_NAME列增加到壓縮鍵后,則使得這個(gè)鍵是惟一的;在這種情況下,則說明沒有重復(fù)的副本可以提取。因此,最后的結(jié)果就是:我們只是向每個(gè)索引鍵條目增加了4個(gè)字節(jié),而不能提取出任何重復(fù)的數(shù)據(jù)。IDX_STATS中的OPT_CMPR_COUNT列真是精準(zhǔn)無比,確實(shí)給出了可用的最佳壓縮數(shù),OPT_COMPR_PCTSAVE則指出了可以得到多大的節(jié)省幅度。
歡迎光臨 Chinaunix (http://72891.cn/) |
Powered by Discuz! X3.2 |