从Oracle9iR2 开始,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 修改现有表为压缩表:

alter table test compress;

取消表的压缩:

alter table test nocompress;

1.3    确定表是否被压缩:确定一个表是否使用了压缩,查询user_tables,compression字段表明表是否被压缩

select table_name,compression from user_tables where table_name not like 'BIN%';
SQL> select table_name,compression from user_tables where table_name not like 'BIN%';TABLE_NAME COMPRESS----------------------------- --------CLASSES      ENABLEDROOMS        ENABLEDSTUDENTS     DISABLEDMAJOR_STATS  DISABLED

2.表空间级别

2.1创建表压缩空间

create tablespace TEST datafile '/export/home/oracle/ora10g/oradata/test/test.dbf' size 10M default compress

与其他存储参数类似,COMPRESS属性也具有一些继承特性。当在一个表空间中创建一个表时,它从该表空间继承COMPRESS属性。

2.2.使现有表空间转换为压缩表空间

alter tablespace test default compress;alter tablespace test default nocompress;

2.3.确定是否已经利用compress对一个表空间进行了定义,可查询user_tablespaces数据字典视图并查看def_tab_compression列

select tablespace_name,def_tab_compression from user_tablespaces;
SQL> select tablespace_name,def_tab_compression from user_tablespaces;TABLESPACE DEF_TAB_---------- --------USERS      DISABLEDTEST       DISABLEDUNDOTBS01  DISABLEDSTATPACK   DISABLED

3.向一个压缩的表中加载数据

注:当像上面那样指定compress时,其它表中(表空间)的数据并没有压缩,它只是修改了数据字典的设置;只有在向一个表中加裁/插入数据时,才会压缩数据.

只有在使用下面4种方法时,表中的数据才会被压缩存放:

(1).直接路径的 sql*load
(2).带有/*+ append*/的 insert语句
(3).create table .. as select..
(4).并行insert

4.压缩一个已经存在但并未压缩的表

使用alter table .. move compress使一个已存在但未压缩的表转换为压缩表.

alter table tmp_test move compress;

同样,也可以使用alter table.. move nocompress来解压一个已经压缩的表:

alter table tmp_test move nocompress;

5.压缩一个物化视图

使用用于压缩表的类似方式来压缩物化视图。

基于多个表的联接生成的物化视图通常很适于压缩,因为它们通常拥有大量的重复数据项。

create materialized view mv_tmp_testcompressas select a.phone,b.create_time from tmp_test a,recv_stat bwhere a.id=b.id;

可以使用ALTER MATERIALIZED VIEW命令来改变一个物化视图的压缩属性。

当你使用此命令时,请注意通常是在下一次刷新该物化视图时才会进行实际的压缩。

alter materialized view mv_temp_test compress;

6.压缩一个已分区的表

在对已分区的表应用压缩时,可以有很多种选择。你可以在表级别上应用压缩,也可以在分区级别上应用压缩。

你可以利用ALTER TABLE ...MOVE PARTITION命令对此分区进行压缩

alter table tmp_test move partition create_200606 compress;

要找出一个表中的哪些分区被压缩了,可以查询数据字典视图USER_TAB_PARTITIONS

SELECT TABLE_NAME, PARTITION_NAME,COMPRESSION FROM USER_TAB_PARTITIONS;

7.压缩表的性能开销

一个压缩的表可以存储在更少的数据块中,从而节省了储存空间,而使用更少的数据块也意味着性能的提高。 在一个I/O受到一定限制的环境中对一个压缩的表进行查询通常可以更快速地完成,因为他们需要阅读的数据库数据块要少得多。

使用sql*load加载100万数据:

表名               行数               路径             是否是压缩的            消耗的时间
 test_nocom   1000000          直接             非压缩的                 00:00:21.12
 test_comp     1000000          直接             压缩的                     00:00:47.77

由此可以看出,向压缩表中加入数据的时间是正常表的一倍.加载压缩的表所需要的额外时间来自于在数据加载过程中所执行的压缩操作。

可以得出的结论是:在很少改变的表上使用压缩技术还是可以的.表中数据经常变动的情况下,尽量不要使用表压缩,它影响插入操作.

Oracle 压缩表与压缩表空间相关推荐

  1. Oracle压缩总结2— 估计表压缩效应

    使用压缩前,我们可以估算压缩能有多大效果. 11gr2我已经能够使用dbms_comp_advisor,具体代码见附件.只需要运行两个文件dbmscomp.sql和prvtcomp.plb.然后使用D ...

  2. 给oracle用户赋权限导入导出,Oracle常用命令-用户、表空间、赋权限、导入导出...

    1.1   删除表空间 drop tablespace QBKJ including contents and datafiles; 1.2   删除用户 drop user admin cascad ...

  3. oracle级联删除表空间,Oracle表的创建.表空间创建删除,导入导出等

    创建表空间; 先在E盘建立oradate再在里面建一个temp, 再打开命令行cmd在写入sqlplus再写入sys/oracle@orcl as sysdba再写入 create tablespac ...

  4. Oracle查看用户所在的表空间

    oracle 查看表空间有哪些表 select * from dba_tables where tablespace_name='表空间名',注意表空间名大小写敏感. select table_nam ...

  5. oracle 用户表数目,表大小,视图数目及表空间等查询增加修改删除操作

    oracle 用户表数目,表大小,视图数目及表空间等查询增加修改删除操作 查看当前用户的缺省表空间 SQL>select username,default_tablespace fromuser ...

  6. mysql压缩表语句_MYSQL静态表、动态表、压缩表总结

    摘要:mysql在创建表的时候定义表的性质(也叫表的类型),共有三种:静态表,动态表,压缩表.默认是静态表,如果存在varchar.blob.te... mysql在创建表的时候定义表的性质(也叫表的 ...

  7. 阿里云mysql数据库引擎_在阿里云RDS数据库服务器中将MySQL InnoDB引擎表转为压缩格式...

    今年以来将我们以前托管或者租用的服务器全面转向阿里云,除了采用ECS服务器以外,还有一项重要的是采用了RDS数据库服务器,这对于服务的稳定性.各项指标的监控.调优等都有帮助. 不过随着近期更多数据库转 ...

  8. mysql 压缩表_MySQL InnoDB 表压缩(行格式压缩)

    MySQL InnoDB支持数据压缩,有两种数据压缩方式,第一种为表压缩,通常也称之为行格式压缩,另外一种是页压缩,页压缩对操作系统及文件系统有一定的要求.本文主要介绍表压缩(行格式压缩)的原理及使用 ...

  9. postgresql数据库 TimescaleDB 定时压缩超表 删除超表(块)

    postgresql数据库 TimescaleDB 定时压缩超表 删除超表(块) 文章目录 postgresql数据库 TimescaleDB 定时压缩超表 删除超表(块) TimescaleDB数据 ...

最新文章

  1. 【Python-ML】集成多数投票分类器-训练评估调优
  2. vue在ie9中的兼容问题
  3. python下电影_Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法...
  4. python opc plc_PYthon简易OPC数据采集写入Access
  5. shell if语句特殊用法(高级用法),工具安装判断
  6. linux ntfs 密码,linux 加载ntfs和fat32分区
  7. linux内核源码多大,Linux内核源代码
  8. Salesforce 中获取数据表字段的 picklist 的值
  9. kali linux 模板文件夹,详解kali linux 常用文件与指令路径
  10. 记:解决We‘re sorry but ... doesn‘t work properly without JavaScript enabled. Please enable it to contin
  11. Python 开发个人微信号在运维开发中的使用
  12. 联想服务器网卡显示不全,ThinkSystem系列服务器板载1Gb网口及LOM网卡接入100Mb交换机显示无连接...
  13. 大数据揭秘| 《少年的你》大火之后,流量明星对电影意味着什么?
  14. httpd离线安装(含依赖包下载地址)
  15. 渗透测试国内外研究_【技术探究】冰箱门封技术现状与研究进展
  16. 如何用python计算函数的值域_(Max第一篇)Python基础代数运算大全
  17. FRED应用:TMT MOBIE成像光谱仪的概念设计阶段杂散光分析
  18. 最小的k个数(堆排序实现)
  19. WEB端项目中接入海康监控视频播放监控画面
  20. 时事评论---宣誓不欠薪,好一场秀

热门文章

  1. 【学习日志】2023.04.24 C++ 调整黑点、白点和中值以增加、平衡或降低对比度
  2. 压力传感器故障检测方法
  3. python七段数码管绘制实验报告_Python绘制七段数码管实例代码
  4. 无尽对决怎么修改服务器地区,无尽对决怎么更改账号 | 手游网游页游攻略大全...
  5. APP发布的三个证书作用
  6. 用Python搞定豆瓣上征婚交友的小姐姐们~
  7. kindle长期未使用,界面显示电池感叹号
  8. 点亮一盏灯,温暖一个梦
  9. 新型光电复合缆特点及其应用
  10. 解决同一路由,不同参数报Navigating to current location ***** is not allowed 问题