该实验的目的是使用压缩的方法存储表中的数据,使表的占用空间少,从而提高内存的使用率.
压缩表的数据
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.适用于不经常更新的,静态的数据仓库
阅读(991) | 评论(0) | 转发(0) |