壓縮索引基本介紹
基本語法 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;即表示壓縮前面的二個字段
鍵索引(compressed key index)的基本概念是,每個鍵條目分解為兩個部分:“前綴”和“后綴”。前綴建立在串聯(lián)索引(concatenated index)的前幾列上,這些列有許多重復(fù)的值。后綴則在索引鍵的后幾列上,這是前綴所在索引條目中的惟一部分(即有區(qū)別的部分)。 將創(chuàng)建一個表和一個串聯(lián)索引,并使用ANALYZE INDEX測量無壓縮時所用的空間。然后利用索引壓縮創(chuàng)建這個索引,分別壓縮不同數(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)建一個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個字段 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時,節(jié)省的幅度更為顯著。所得到的索引大約是原索引(無壓縮索引)的70%,而且由于數(shù)據(jù)量減少,利用列OPT_CMPR_PCTSAVE的信息(這代表最優(yōu)的節(jié)省壓縮百分比(optimum compression percent saved)或期望從壓縮得到的節(jié)省幅度)。我們可以猜測出COMPRESS 2索引的大小。
注意 對無壓縮索引執(zhí)行ANALYZE命令時,會填寫OPT_CMPR_PCTSAVE/OPT_CMPR_COUNT列,并估計出:利用COMPRESS 2,可以節(jié)省28%的空間;而事實確實如此,我們果真節(jié)省了大約這么多的空間。 不過,再看看COMPRESS 3會怎么樣。如果壓縮3列,所得到的索引實際上會更大:是原來索引大小的110%。這是因為:每刪除一個重復(fù)的前綴,能節(jié)省N個副本的空間,但是作為壓縮機制的一部分,這會在葉子塊上增加4字節(jié)的開銷。把OBJECT_NAME列增加到壓縮鍵后,則使得這個鍵是惟一的;在這種情況下,則說明沒有重復(fù)的副本可以提取。因此,最后的結(jié)果就是:我們只是向每個索引鍵條目增加了4個字節(jié),而不能提取出任何重復(fù)的數(shù)據(jù)。IDX_STATS中的OPT_CMPR_COUNT列真是精準(zhǔn)無比,確實給出了可用的最佳壓縮數(shù),OPT_COMPR_PCTSAVE則指出了可以得到多大的節(jié)省幅度。
|