Oracle压缩表表空间 #####
Oracle压缩表/表空间从Oracle 9iR2开始,ORACLE提供了表/表空间压缩技术,以减少磁盘开销,节省空间,并在某 些情况下提高查询性能。表压缩是如何工作的在Orcle9i第2版中,表压缩特性通过删除在数据库表中发现的重复数据值来节省空间。压 缩是在数据库的数据块级别上进行的。当确定一个表要被压缩后,数据库便在每一个数据库 数据块中保留空间,以便储存在该数据块中的多个位置上出现的数据的单一拷贝。这一被保 留的空间被称作符号表(symbol table)。被标识为要进行压缩的数据只存储在该符号表中, 而不是在数据库行本身内。当在一个数据库行中出现被标识为要压缩的数据时,该行在该符 号表中存储一个指向相关数据的指针,而不是数据本身。节约空间是通过删除表中数据值的 冗余拷贝而实现的。1.表级别1.1创建一个压缩表:创建表时使用COMPRESS关键字,COMPRESS关键字指示Oracle数据库尽可能以压缩的格 式存储该表中的行。create table test compress as select * from dba_objects where 1=2;create table test (id number,name varchar2(20),time date) compress;1.2修改现有表为压缩表:SQL> alter table test compress;取消表的压缩:SQL> alter table test nocompress;1.3确定表是否被压缩:确定一个表是否使用了压缩,查询user_tables,compression字段表明表是否被压缩2. 表空间级别2.1创建表压缩空间create tablespace TEST datafile '/export/home/oracle/ora10g/oradata/test/test.dbf' size 10M default compress;与其他存储参数类似,COMPRESS属性也具有一些继承特性。当在一个表空间中创建一个 表时,它从该表空间继承COMPRESS属性。2.2. 使现有表空间转鬼雄为压缩表空间SQL> alter tablespace test default compress;SQL> alter tablespace test default nocompress;2.3. 确定是否已经利用compress对一个表空间进行了定义,可查询user_tablespaces数据字典视图并查看 def_tab_compression 列SQL> select tablespace_name,def_tab_compression from user_tablespaces;select tablespace_najne, def_tab_coirpzesiaion f rem dtaa_cableaipaces whereB TEST1 ;辱-g食 3 |攀H o-TABLESRACE_NAME _DEFLTAB_CQMPRESSION*|巾扇EMACLED3. 压缩一个已经存在但并压缩的表使用alter table . move compress使一个已存在但未压缩的表转换为压缩表.SQL> alter table test move compress;同样,也可以使用alter table. move nocompress来解压一个已经压缩的表:SQL> alter table test move nocompress;4. 压缩表的恨不能开销一个压缩的表可以存储在更少的数据块中,从而节省了储存空间,而使用更少的数据块也意 味着性能的提高。在一个I/O受到一定限制的环境中对一个压缩的表进行查询通常可以更 快速地完成,因为他们需要阅读的数据库数据块要少得多。1008680数据压缩比例:SQL 0utput $胳tis独select seqment_nair,ebyt£3/1024/1024 from dfca_segmenta wherelike 'TEST% p;金萎Q编4SEGMENT_MAME | BYTE 3/1024/10211TEST722TESTI801008680数据插入消耗的时间:褰客是否是压缩'消就的间test1008630compress14.352100B6S0noconpress4.945由此可以看出,向压缩表中加入数据的时间是正常表的3倍多.加载压缩的表所需要的额外时 间来自于在数据加载过程中所执行的压缩操作。可以得出的结论是:在很少改变的表上使用压缩技术还是可以的表中数据经常变动的情况下, 尽量不要使用表压缩,它影响插入操作.