压缩表空间

来源:互联网 发布:我的世界pe我是僵尸js 编辑:程序博客网 时间:2024/05/22 18:24
压缩表空间的优点:节省空间
            缺点:消耗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






0 0
原创粉丝点击