|
在创建组合索引时,通常会把选择性好的列作为前导列,但在创建带compress选项的组合索引时,恰恰相反,最好把选择性最差的列作前导列,这样创建出来的索引,更能节省存储空间,但compress选项如何取值呢?请看下面的测试:
--测试场景: create table tmp_objects as select * from all_objects; --创建索引 create index idx_objects_objid1 on tmp_objects(object_id,object_type,owner); create index idx_objects_objid2 on tmp_objects(owner,object_type,object_id); --分析索引 SQL> analyze index idx_objects_objid1 validate structure; SQL> select name,lf_blks,opt_cmpr_count,opt_cmpr_pctsave from index_stats; NAME LF_BLKS OPT_CMPR_COUNT OPT_CMPR_PCTSAVE ------------------------------ ---------- -------------- ---------------- IDX_OBJECTS_OBJID1 111 0 0 SQL> analyze index idx_objects_objid2 validate structure; SQL> select name,lf_blks,opt_cmpr_count,opt_cmpr_pctsave from index_stats; NAME LF_BLKS OPT_CMPR_COUNT OPT_CMPR_PCTSAVE ------------------------------ ---------- -------------- ---------------- IDX_OBJECTS_OBJID2 111 2 46 --压缩索引 SQL> alter index idx_objects_objid2 rebuild compress 2; SQL> analyze index idx_objects_objid2 validate structure; SQL> select name,lf_blks,opt_cmpr_count,opt_cmpr_pctsave from index_stats; NAME LF_BLKS OPT_CMPR_COUNT OPT_CMPR_PCTSAVE ------------------------------ ---------- -------------- ---------------- IDX_OBJECTS_OBJID2 60 2 0 --测试说明 在index_stats字典中的opt_cmpr_count字段是analyze index ... validate structure推荐的compress取值,opt_cmpr_pctsave就是评估可以节省的百分比,比如idx_objects_objid2的opt_cmpr_pctsave是46,表示如果按compress 2进行压缩索引,那索引就可以少节省46%的空间,索引压缩后lf_blks是60个块,实际上通过压缩,共节省了51个块(111-60)...
|