发布网友 发布时间:2023-04-11 09:52
共1个回答
热心网友 时间:2023-09-18 19:03
从Oracle iR 开始 ORACLE提供了表/表空间压缩技术 以减少磁盘开销 节省空间 并在某些情况下提高查询性能
表压缩是如何工作的在Orcle i第 版中 表压缩特性通过删除在数据库表中发现的重复数据值来节省空间 压缩是在数据库的数据块级别上进行的 当确定一个表要被压缩后 数据库便在每一个数据库数据块中保留空间 以便储存在该数据块中的多个位置上出现的数据的单一拷贝 这一被保留的空间被称作符号表(symbol table) 被标识为要进行压缩的数据只存储在该符号表中 而不是在数据库行本身内 当在一个数据库行中出现被标识为要压缩的数据时 该行在该符号表中存储一个指向相关数据的指针 而不是数据本身 节约空间是通过删除表中数据值的冗余拷贝而实现的
表级别 创建一个压缩表 创建表时使用PRESS关键字 PRESS关键字指示Oracle数据库尽可能以压缩的格式存储该表中的行
create table test press as select * from dba_objects where = create table test (id number name varchar ( ) time date) press 修改现有表为压缩表 SQL> alter table test press 取消表的压缩 SQL> alter table test nopress 确定表是否被压缩 确定一个表是否使用了压缩 查询user_tables pression字段表明表是否被压缩
表空间级别 创建表压缩空间create tablespace TEST datafile /export/home/oracle/ora g/oradata/test/test dbf size M default press 与其他存储参数类似 PRESS属性也具有一些继承特性 当在一个表空间中创建一个表时 它从该表空间继承PRESS属性
使现有表空间转换为压缩表空间SQL> alter tablespace test default press SQL> alter tablespace test default nopress 确定是否已经利用press对一个表空间进行了定义 可查询user_tablespaces数据字典视图并查看def_tab_pression列SQL> select tablespace_name def_tab_pression from user_tablespaces
压缩一个已经存在但并没有压缩的表使用alter table …… move press使一个已存在但未压缩的表转换为压缩表
SQL> alter table test move press 同样 也可以使用alter table…… move nopress来解压一个已经压缩的表 SQL> alter table test move nopress 压缩表的性能开销一个压缩的表可以存储在更少的数据块中 从而节省了储存空间 而使用更少的数据块也意味着性能的提高 在一个I/O受到一定*的环境中对一个压缩的表进行查询通常可以更快速地完成 因为他们需要阅读的数据库数据块要少得多
由此可以看出 向压缩表中加入数据的时间是正常表的 倍多 加载压缩的表所需要的额外时间来自于在数据加载过程中所执行的压缩操作
lishixin/Article/program/Oracle/201311/17071