oracle从9i r2开始推出了compress table的功能,compress table能提供良好的压缩性能,十分适用于存储历史数据。的打算

compress table需要通过创建table时指定compress子句

SQL 9I>create table testcom3(a number) compress;

Table created.

需要通过批量导入数据才能实现compress

1.alter table move

2.create table as select   --compress是可以的,从compressed表是无法ctas为nocompress

3.insert /*+ APPEND */

4.direct path sqlldr

下面来看一些例子

SQL 9I>create table test(a varchar2(10),b number);

Table created.

begin

for i in 1..1000 loop

insert into test values(to_char(mod(i,9)),i);

commit;

end loop;

end;

/

PL/SQL procedure successfully completed.

SQL 9I>create table testcom1 compress as select * from test order by a;

Table created.

SQL 9I>set serveroutput on

SQL 9I>exec show_space('TEST');

Unformatted Blocks .....................              32

FS1 Blocks (0-25)  .....................               0

FS2 Blocks (25-50) .....................               0

FS3 Blocks (50-75) .....................               1

FS4 Blocks (75-100).....................              26

Full Blocks        .....................               1

Total Blocks............................             128

Total Bytes.............................       1,048,576

Total MBytes............................               1

Unused Blocks...........................              64

Unused Bytes............................         524,288

Last Used Ext FileId....................              11

Last Used Ext BlockId...................             904

Last Used Block.........................             64

PL/SQL procedure successfully completed.

SQL 9I>exec show_space('TESTCOM1');

Unformatted Blocks .....................               0

FS1 Blocks (0-25)  .....................               0

FS2 Blocks (25-50) .....................               0

FS3 Blocks (50-75) .....................               0

FS4 Blocks (75-100).....................               0

Full Blocks        .....................               2

Total Blocks............................             128

Total Bytes.............................       1,048,576

Total MBytes............................               1

Unused Blocks...........................             122

Unused Bytes............................         999,424

Last Used Ext FileId....................              11

Last Used Ext BlockId...................           1,032

Last Used Block.........................               6

PL/SQL procedure successfully completed.

可以看到compress table提供了良好的压缩比

另外创建compress table的时候还需要注意的是order by子句的功能

create table test2(a varchar2(10),b varchar2(10),c varchar2(10));

begin

for i in  1000000000..1000100000 loop

insert into test2 values(i,'1',to_char(mod(i,100)));

commit;

end loop;

end;

/

create table testcom4 compress as select * from test2 order by c;

create table testcom5 compress as select * from test2;

SQL 9I>exec show_space('TEST2');

Unformatted Blocks .....................               0

FS1 Blocks (0-25)  .....................               0

FS2 Blocks (25-50) .....................               0

FS3 Blocks (50-75) .....................               0

FS4 Blocks (75-100).....................              24

Full Blocks        .....................             288

Total Blocks............................             384

Total Bytes.............................       3,145,728

Total MBytes............................               3

Unused Blocks...........................              64

Unused Bytes............................         524,288

Last Used Ext FileId....................              13

Last Used Ext BlockId...................           1,032

Last Used Block.........................              64

PL/SQL procedure successfully completed.

SQL 9I>exec show_space('TESTCOM4');

Unformatted Blocks .....................               0

FS1 Blocks (0-25)  .....................               0

FS2 Blocks (25-50) .....................               0

FS3 Blocks (50-75) .....................               0

FS4 Blocks (75-100).....................               0

Full Blocks        .....................             226

Total Blocks............................             256

Total Bytes.............................       2,097,152

Total MBytes............................               2

Unused Blocks...........................              24

Unused Bytes............................         196,608

Last Used Ext FileId....................              12

Last Used Ext BlockId...................           1,160

Last Used Block.........................             104

PL/SQL procedure successfully completed.

SQL 9I>exec show_space('TESTCOM5');

Unformatted Blocks .....................               0

FS1 Blocks (0-25)  .....................               0

FS2 Blocks (25-50) .....................               0

FS3 Blocks (50-75) .....................               0

FS4 Blocks (75-100).....................               0

Full Blocks        .....................             259

Total Blocks............................             384

Total Bytes.............................       3,145,728

Total MBytes............................               3

Unused Blocks...........................             117

Unused Bytes............................         958,464

Last Used Ext FileId....................              13

Last Used Ext BlockId...................           1,160

Last Used Block.........................              11

PL/SQL procedure successfully completed.

可见order by子句对compress影响也是比较大,我们应该指定重复值多并且长度大的列做order by以获得最大的压缩比。

有人会对compress的读写性能表示担忧,但是实际上无论是全表扫描还是通过索引回表扫描压缩表的性能都不会比非压缩表差。至于dml,压缩表应该是不推荐进行dml的,但是当你通过非bulk操作inert 数据时那么这些数据将会不会进行压缩存储,也就是按照普通格式操作,所以效率并不会低,但是还是要避免对压缩表进行dml操作,尤其是update,update将会导致行迁移,从而使压缩表的容量比非压缩表还要大。

oracle表压缩比,oracle的compress 特性介绍相关推荐

  1. 开工大吉:Oracle 18c已经发布及新特性介绍

    在2018的新年(据2月16日文章),Oracle宣布Database 18c已经发布,但是仍然是首先在Oracle Cloud上一体机环境发布出来.所以要等到常规版本的公开提供,还有一段时间要等. ...

  2. oracle表 游标,Oracle游标表达式和表函数

    Oracle游标表达式是Oracle数据库中的重要概念,下面就为您详细介绍Oracle游标表达式和表函数方面的知识,供您参考学习之用. Oracle游标表达式(有时称为游标子队列)是 SQL 语言的一 ...

  3. oracle 表跟踪,Oracle表变化趋势追踪记录

    #DBA_HIST_SEG_STAT可以看出对象的使用趋势,构造如下SQL查询出每个时间段内数据库对象的增长量,其中DB_BLOCK_CHANGES_DELTA为块个数 select c.SNAP_I ...

  4. 如何手动修改oracle表空间,ORACLE数据库创建和修改表空间

    -建立表空间(oracle中的tablespace(表空间)) CREATE TABLESPACE data01 DATAFILE 'D:\oracle\ora92\oradata\db\DATA01 ...

  5. oracle 表 上限,Oracle分区表(Partition Table)的数量限制

    Oracle分区表(Partition Table)的数量限制 有朋友在我的留言板上问到这样一个问题: oracle分区表是不是有最大分区个数限制,我有一张大约20G的表,有好多分区(按时间),结果根 ...

  6. rac建oracle表空间,Oracle Rac创建表空间及用户

    1. 创建表空间: BEGIN DECLARE cnt integer := 0; BEGIN SELECT 1 INTO cnt FROM dual WHERE exists(SELECT * FR ...

  7. exp oracle 表空间,oracle之EXP导出表空间错误解决

    导出表空间 第一 以DBA的权限登录 第二 检查表空间是否自我包容,检查结果将被放到视图transport_set_violations SQL> execute dbms_tts.transp ...

  8. 删除数据清理oracle表空间,oracle数据库删除无用表空间及数据文件过程

    应用场景:html 数据库服务器A下的一张数据库表重建过,而且数据已经迁移到新表空间下,现遗留了一些原有的表空间数据文件在服务器上,耗费资源,如图所示: linux 原数据库表对应的数据文件:sql ...

  9. oracle表参数,Oracle 表的创建 及相关参数

    1.创建表完整语法 CREATE TABLE [schema.]table (column datatype [, column datatype] - ) [TABLESPACE tablespac ...

最新文章

  1. 安装android studio出现choose an account with administrator
  2. 计算机网络OSI架构详细图
  3. CSS中颜色代码和单位
  4. Flutter之Container
  5. 均分纸牌(经典贪心)
  6. Adobe illustrator 批量变换同时选中的单个对象 - 连载 12
  7. 猿创征文|[CM311-1A Armbian]-烧录制作 Armbian 系统盘以及写入 CM311-1A 机顶盒的 EMMC 刷成服务器
  8. perl脚本GET系统命令执行
  9. 从JavaEye社区被迫改名说起(转载他人博客)
  10. 进销存excel_Excel教程:教大家做简单的进销存
  11. 判断四张扑克牌能否凑成24点游戏算法
  12. java 有多少种锁_java有哪些锁?java锁种类盘点
  13. 走向全民开发,低代码重塑企业数字化生产力 | 爱分析报告
  14. SpringCloud这35问,弄懂了面试官都不得不夸你一句
  15. 解决Word导出PDF显示有批注的问题
  16. 浅谈中国院落文化,打造中式家居风尚!
  17. 判断两个区间有无交集
  18. TopCoder SRM 558 Div 1 - Problem 1000 SurroundingGame
  19. 登陆注册-带图片的验证码
  20. matlab diary on,matlab-dlmwrite跟diary输出数据

热门文章

  1. 鼠标控制视角wasd移动_绝地求生:为什么控制方向键是WASD?网友:就不能是其他键位吗?...
  2. token拦截器android_vue.js添加拦截器,实现token认证(使用axios)
  3. 导师什么时候会放弃学生?
  4. 张景中:把数学变容易大有可为
  5. 中国空间站核心舱首次公开亮相:将于2022年前后完成在轨建造
  6. Matlab高级绘图功能
  7. 推荐系统: 数据、问题与算法
  8. java选课系统_java实现学生选课系统
  9. 游戏入口点GameEntryPoint
  10. 运行cudasift