Chinaunix首页 | 论坛 | 博客
  • 博客访问: 52435
  • 博文数量: 25
  • 博客积分: 2015
  • 博客等级: 大尉
  • 技术积分: 215
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-16 17:34
文章分类
文章存档

2008年(25)

我的朋友

分类: Oracle

2008-03-11 16:37:54

该实验的目的是使用压缩的方法存储表中的数据,使表的占用空间少,从而提高内存的使用率.
 
压缩表的数据
conn scott/tiger
 
drop table t1 purge;
 
create table t1 as select * from emp;
 
insert into t1 select * from t1;
/
/
/
/
/
---到10000行
 
drop table t2 purge;
 
create table t2 compress as select * from t1 order by ename; 压缩并排序
 
select segment_name,blocks from dba_segments where segment_name in ('T1','T2');
 
SEGMENT_NAME                       BLOCKS
------------------------------ ----------
T1                                    256
T2                                     48
可以看到,压缩得很厉害.压缩后的数据块存放了720行,接近一个数据块可以存放行的极限,因为一个8k的数据块最多存放733行数据.压缩存储的原理是每个块内相同的数据只存放一次.所以我们在压缩表的时候最好要排序.我们把大的静态表压缩存放,这样可以节约空间,又提高了I/0的效率.还节约了内存的使用,但是经常update的表我们不要压缩存储,那样会下降DML语句的性能.
 
SQL> truncate table t2 ; 清空表
Table truncated.
 
 
SQL>  select segment_name,blocks from dba_segments where segment_name in ('T1','T2');
SEGMENT_NAME                       BLOCKS
------------------------------ ----------
T1                                    256
T2                                      8
 
SQL> insert /*+ append */ into t2 select * from t1;  并行插入
28672 rows created.
 
SQL>select segment_name,blocks from dba_segments where segment_name in ('T1','T2');                                                                      
SEGMENT_NAME                       BLOCKS
------------------------------ ----------
T1                                    256
T2                                     48
 
 
可以并行插入有压缩,一行一行的插入不能压缩,没有意义.
 
 
压缩表--总结
1.将同一块内相同的数据只存储一次
2.普通插入无效,并行插入有效.
3.会对update降低效率
4.适用于不经常更新的,静态的数据仓库
 
阅读(1000) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~