压缩表空间的优点:节省空间
缺点:消耗cpu
适合:一般用于存放历史数据,或者不经常update delete的表
压缩表空间技术是从11g 开始的,10g一般还是压缩表
创建压缩表空间:
SQL> CREATE TABLESPACE compress01 datafile 'D:\APP\ADMINISTRATOR\ORADATA\ORA11G\COMPRESS01.DBF' DEFAULT COMPRESS FOR OLTP ;
表空间已创建。
创建大文件的压缩表空间
SQL> CREATE bigfile TABLESPACE compress02 datafile 'D:\APP\ADMINISTRATOR\ORADATA\ORA11G\COMPRESS02.DBF' DEFAULT COMPRESS FOR OLTP ;
表空间已创建。
创建一个普通表空间,然后修改普通表空间为压缩表空间
SQL> CREATE TABLESPACE test datafile 'D:\APP\ADMINISTRATOR\ORADATA\ORA11G\test01.DBF' size 20m ;
表空间已创建。
SQL> alter tablespace test default compress for oltp
;
表空间已更改。
SQL> select tablespace_name, compress_for from dba_tablespaces;
TABLESPACE_NAME COMPRESS_FOR
------------------------------ ------------------------
TEST OLTP
COMPRESS01 OLTP
COMPRESS02 OLTP
已选择8行。
取消表空间的压缩
SQL> alter tablespace test default nocompress;
表空间已更改。
SQL> select tablespace_name, compress_for from dba_tablespaces;
TABLESPACE_NAME COMPRESS_FOR
------------------------------ ------------------------
TEST
COMPRESS01 OLTP
COMPRESS02 OLTP
TEST5
已选择9行。
SQL> CREATE TABLESPACE test5 datafile 'D:\APP\ADMINISTRATOR\ORADATA\ORA11G\test02.DBF' size 20m autoextend on
next 10m extent management local uniform size 1m ;
表空间已创建。
在compress01 表空空间里创建表
--在压缩表空间里创建oltp压缩表
SQL> create table t4 compress for oltp tablespace compress01 as select * From emp where 0=1;
表已创建。
---在压缩表空间里创建非压缩表
SQL>create table t5 tablespace compress01 as select * From emp where 0=1;
表已创建。
SQL> insert into t4 select *From test;
已创建196608行。
SQL> insert into t5 select *From test;
已创建196608行。
SQL> commit;
提交完成。
SQL> analyze table t5 compute statistics;
表已分析。
SQL> analyze table t4 compute statistics;
表已分析。
SQL> select table_name,blocks,compress_for From dba_tables where table_name in ('T4','T5');
TABLE_NAME BLOCKS COMPRESS_FOR
------------------------------ ---------- ------------
T4 496 OLTP
T5 496 OLTP
结论:在oltp压缩表空间里创建表,如果不指定默认的压缩方式,默认是按照表空间的压缩方式oltp方式来进行压缩
SQL> create table t6 compress tablespace compress01 as select * From emp where 0=1;
表已创建。
SQL> select table_name,blocks,compress_for From dba_tables where table_name in ('T4','T5','T6');
TABLE_NAME BLOCKS COMPRESS_FOR
------------------------------ ---------- ------------
T4 496 OLTP
T5 496 OLTP
T6 BASIC
结论:如果在oltp压缩表空间内创建表的时候,指定压缩方式为basic compress,那么创建的表是按照basic compression 压缩
说明表级别的压缩方式会覆盖表空间级别的压缩方式
索引的压缩:
SQL> create index ind_t4 on t4(empno,ename) tablespace compress01;
索引已创建。
SQL> create index ind_t5 on t5(empno,ename) compress tablespace compress01;
索引已创建。
SQL> select index_name,compression ,leaf_blocks,tablespace_name From user_indexes where table_name in ('T4','T5');
INDEX_NAME COMPRESS LEAF_BLOCKS TABLESPACE_NAME
------------------------------ -------- ----------- ------------------------------------------------------------
IND_T5 ENABLED 303 COMPRESS01
IND_T4 DISABLED 573 COMPRESS01
结论:虽然我们是在压缩表空间里创建索引,但是索引仍然是disabled,没有压缩,所有如果要压缩索引,必须手动指明compress