Oracle数据压缩初探 -- 1

一、测试准备:
1、创建两张表,t_compress压缩表,t_nocompress未压缩表。
2、使用dba_objects视图作为插入数据;每张表的数据量为100万条。

MIKE@ PROD> create table t_nocompress as select rownum id,a.* from sys.dba_objects a where 1=2; 

Table created.

 

MIKE@ PROD> alter table t_nocompress nologging;

Table altered.

运行下面的代码:
bb

MIKE@ PROD> create table t_compress compress as select * from t_nocompress;

Table created.

二、比较两张表的占用空间

MIKE@ PROD> select segment_name,count(extent_id) extent_num,sum(bytes) space_size

  2  from user_extents

  3  where segment_name in ('T_COMPRESS','T_NOCOMPRESS')

  4  group by segment_name;

 

SEGMENT_NAME              EXTENT_NUM SPACE_SIZE

-------------------------  ----------  ----------

T_COMPRESS                            53    39845888

T_NOCOMPRESS                      86  125829120


根据比较压缩的表比未压缩的少33extent,并且空间大小约是未压缩的四分之一。

在dba_objects中有object_id,object_name这两个字段,它们的值重复率非常低,几乎没有重复值,现在再创建两张表,只有这两个字段,一张压缩,一张不压缩,再看看它们所占用的空间。

MIKE@ PROD> create table t_compress1 compress as select object_id,object_name from sys.dba_objects

 

Table created.

 

MIKE@ PROD> create table t_nocompress1 as select object_id,object_name from sys.dba_objects;

 

Table created.

 

MIKE@ PROD> select segment_name,count(extent_id) extent_num,sum(bytes) space_size

  2  from user_extents

  3  where segment_name in ('T_COMPRESS1','T_NOCOMPRESS1')

  4  group by segment_name;

 

SEGMENT_NAME    EXTENT_NUM SPACE_SIZE

--------------- ---------- ----------

T_COMPRESS1             17    2097152

T_NOCOMPRESS1            17     2097152

压缩、未压缩的表所占空间是一样的。

综上,压缩对于值重复率高的表,在节省存储空间上是非常有效的;对于值重复率低的(比如主键),是没有什么效果的。

三、在数据库中,索引也是需要存储空间的,现在来看看它的情况。

MIKE@ PROD> create index idx_t_compress_id on t_compress(object_id) compress;

Index created.

 

MIKE@ PROD> create index idx_t_compress_type on t_compress(object_type) compress;

Index created.

 

MIKE@ PROD> create index idx_t_nocompress_id on t_nocompress(object_id);

Index created.

 

MIKE@ PROD> create index idx_t_nocompress_type on t_nocompress(object_type);

Index created.

 

MIKE@ PROD> select segment_name,count(extent_id) extent_num,sum(bytes) space_size

  2  from user_extents

  3  where segment_name in ('IDX_T_COMPRESS_ID','IDX_T_NOCOMPRESS_ID','IDX_T_COMPRESS_TYPE','IDX_T_NOCOMPRESS_TYPE')

  4  group by segment_name;

 

SEGMENT_NAME              EXTENT_NUM SPACE_SIZE

------------------------- ---------- ----------

IDX_T_COMPRESS_TYPE                  28   13631488       #object_type重复率非常高

IDX_T_NOCOMPRESS_TYPE             37   23068672

IDX_T_NOCOMPRESS_ID                    33   18874368      #通过前面的代码可以看出,ID是没有重复值的

IDX_T_COMPRESS_ID                          40   26214400

从上面的结果中,可以说值重复率高的字段上创建的索引,经过压缩的所占用的空间明显低于未压缩的;但是对于值重复率低的(比如主键),经过压缩的所占空间反而高于未压缩的。


所以,压缩技术适合值重复率高的应用场景;对值重复率低的,反而不能体现出它的优势。




fj.pngdata.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26812308/viewspace-744687/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26812308/viewspace-744687/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值