今天看了简单的了解了一下压缩索引,写写,为了以后更好的学习,当然肯定写的不是很全面,还得继续努力了
压缩索引顾名思义就是对索引进行压缩,对组合索引,特别是重复率高的进行压缩,那么它能带来什么好处呢?首先它占用的磁盘空间少,其次了缓冲区就可以存放更多的索引条目了,而且缓冲命中率较高,并且物理I/O 较少。也就是可以使用更少的叶块,但是同样也有缺点的,不正确的压缩会带来很大的麻烦,它需要更多的从cpu进行处理,那么压缩索引到底能不能提高性能呢?这得实际中进行实验,下面简单用举例来说明压缩引的一些相关知识。
实验步骤
1.我们先用oracle中自带的表来实验,all_object,创建表,创建索引,然后把重复率高的放在索引的最前面
create table t
as
select * from all_objects;
create index t_idx on t(owner,object_type,object_name);
2.对索引进行分析,可以看索引的一些压缩的比率以及压缩的一些空间等信息。我们分别对上面的索引进行无压缩的,压缩一列,压缩两列,压缩3列来进行分析。
create table idx_stats
as
select 'noncompressed' what, a.*
from index_stats a;
我们把未压缩的放在idx_stats 表中,然后我们分别把其它压缩的三种都放在idx_stats中进行比较
压缩一列
drop index t_idx;
create index t_idx on
t(owner,object_type,object_name)
compress 1;
analyze index t_idx validate structure;
insert into idx_stats
select 'compress 1', a.*
from index_stats a;
压缩两列
drop index t_idx;
create index t_idx on
t(owner,object_type,object_name)
compress 2;
analyze index t_idx validate structure;
insert into idx_stats
select 'compress 2', a.*
from index_stats a;
压缩三列
drop index t_idx;
create index t_idx on
t(owner,object_type,object_name)
compress 3;
analyze index t_idx validate structure;
insert into idx_stats
select 'compress 3', a.*
from index_stats a;
3.我们来进行对比一下进行分析
我们来分析一些,height 是索引的高度,biree_space 是索引的大小,opt_cmpr_count 是索引评估的最佳压缩行,本例中是两行,opt_cmpr_pctsave 是索引可以节约的空间,如在本例中压缩两列可以节约28%的空间,2800096*28%。
从本例中可以看出压缩最佳行两行以后,就再不能节约空间了,并且索引的高度也变为了2,这是因为通过压缩,数据量减少,就可以放在单个的块上,所以高度也就减少了,就这就大大的减少了I/O 读,但是压缩了3行以后,反而占的空间大了,这是索引的压缩机制造成了。所以在压缩时要注意,一般情况下,压缩索引还是适合静态的环境,如数据仓库,如果有大量的DML语句也是不适合的。
|