表空间级COMPRESS属性
可以在表空间级别上定义COMPRESS属性,既可以在生成时利用CREATE TABLESPACE来定义,也可以稍后时间利用ALTER TABLESPACE来定义。与其他存储参数类似,COMPRESS属性也具有一些继承特性。
当在一个表空间中创建一个表时(默认不加参数时),它从该表空间继承COMPRESS属性。
压缩表的应用场景:
压缩表可提高查询效率,但会大大降低插入和删除效率(个人建议当表大于100G时在考虑吧)
alter table hu move partition "REN130602" compress parallel 8 nologging;
1.olap因为不需要频繁修改,所以使用数据压缩可以节省空间,减少IO,建议尽量使用
2.oltp中需要视情况而定,分析具体对象中的重复数据大概占总量的多少,以及具体运行时占用资源的情况,综合考虑是否适用
实验一:将使现有表空间转换为压缩表空间,创建表并查看COMPRESS属性。
启用表空间级的 compress
SQL> alter tablespace users default compress;
Tablespace alteredSQL> create table test3 tablespace users as select * from dba_objects;
Table created
SQL> select table_name,compression from user_tables where table_name='TEST3';
TABLE_NAME COMPRESSION
------------------------------ -----------
TEST3 ENABLED
禁用表空间级的 compress
SQL> alter tablespace users default nocompress;Tablespace altered
SQL> create table test4 tablespace users as select * from dba_objects;
Table created
SQL> select table_name,compression from user_tables where table_name='TEST4';
TABLE_NAME COMPRESSION
------------------------------ -----------
TEST4 DISABLED
实验二:示例演示表级数据压缩的效果。
可以在一个表空间里直接压缩或解压缩一个表,而不用考虑表空间级别上的COMPRESS属性。
SQL> create table testcompress as select * from dba_objects;
Table created
SQL> create table test1 as select * from dba_objects;
Table created
SQL> col segment_name for a20
SQL> select segment_name,extents,blocks,bytes/1024 KB from dba_segments where segment_name in('TEST','TEST1');
SEGMENT_NAME EXTENTS BLOCKS KB
-------------------- ---------- ---------- ----------
TEST 18 384 3072
TEST1 24 1152 9216
SQL> select table_name,compression from user_tables where table_name='TEST1' or table_name='TEST';
TABLE_NAME COMPRESSION
------------------------------ -----------
TEST ENABLED
TEST1 DISABLED
表压缩的改变:设置为非压缩表
SQL> alter table test nocompress;
Table altered
SQL> select table_name,compression from user_tables where table_name='TEST1' or table_name='TEST';
TABLE_NAME COMPRESSION
------------------------------ -----------
TEST DISABLED
TEST1 DISABLED
SQL> alter table test move compress;
Table altered
SQL> select table_name,compression from user_tables where table_name='TEST1' or table_name='TEST';
TABLE_NAME COMPRESSION
------------------------------ -----------
TEST ENABLED
TEST1 DISABLED