资讯专栏INFORMATION COLUMN

Oracle基础学习之表压缩

IT那活儿 / 3529人阅读
Oracle基础学习之表压缩

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!


背景介绍

Oracle支持在表空间(tablespace)、数据表(table)和分区(Partition)级别的压缩,如果设置为表空间级别,那么默认将该表空间中的全部的表都进行压缩。
压缩操作可以在数据单条插入、数据修改和数据批量导入时发生。
随着数据库不断增长,可以考虑使用表压缩。压缩可以节省磁盘空间,减少数据库buffer cache内存使用,并且可以加速查询。
压缩对于数据装载和DML操作有一定的CPU消耗。然而,这些消耗可以为I/O的减少而抵消。
表压缩对于应用程序完全透明。对于DSS系统、在线事务处理和归档系统都很有用处。
你可以为表空间,表或者一个分区指定压缩。如果指定为表空间基本,那么该表空间所有表创建后默认都启用压缩。
压缩可以再数据插入,更新或者批量装载入表中时发生。
压缩表允许以下操作:
Single-row or array inserts and updates 单行或多行插入和更新。

特点:

  • 使用基本压缩,只有当数据是直接路径插入或更新记录(direct-path insert and updated )时才会发生压缩。
  • 并且支持有线的数据类型和SQL操作。


建立测试表

create table t_compress1(a number,b number,c number) compress pctfree 0;


生成测试数据

insert /*+ append*/ into t_uncompress select 
rownum,mod(rownum,10000),mod(rownum,3) from 
all_objects,all_objects where rownum<300000;


直接路径插入

insert /*+ append*/ into t_compress1 select * from t_uncompress order by a;


普通方法插入

insert into t_compress4 select * from t_uncompress order by c;


查看各压缩列(order by)的压缩率

select table_name,round((blocks-EMPTY_BLOCKS)/(select 
blocks-EMPTY_BLOCKS from user_tables where 
table_name=T_UNCOMPRESS)*100,2) pct from user_tables where 
table_name like %T_COMPRESS%;

由此看出,order by(压缩列)的列不同会导致压缩率的不同,这里是B压缩列压缩率最高。


查看数据分布情况

select column_name,NUM_NULLS,NUM_DISTINCT,AVG_COL_LEN from user_tab_columns where table_name=T_UNCOMPRESS;


结论

8.1 选择性较低、长度较大的列作为压缩列会得到较高的压缩率
如果列是选择性很高,则根据该列压缩没有意义,甚至可能压缩后占用空间比不压缩更高。
如果不指定order by,oracle会自动选择一个合适的列作为压缩列,但压缩率不一定是最高的。
8.2 普通的DML不会压缩数据
只有以下情况才会对数据进行压缩:
o insert /*+ append * /
o create table as select
o direct path loads
o moves



本文作者:杨 浩(上海新炬王翦团队)

本文来源:“IT那活儿”公众号

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129164.html

相关文章

  • 深度习之图像视频压缩技术

    摘要:目前,其已经在人脸识别等领域证明了它的强大能力,有理由相信在不久的将来,深度学习技术将为图像视频压缩领域带来更大的突破。 说到图像压缩算法,最典型的就是JPEG、JPEG2000等。showImg(https://segmentfault.com/img/bV1ObD?w=539&h=412); 其中JPEG 采用的是以离散余弦转换(Discrete Cosine Transform)...

    Salamander 评论0 收藏0
  • python标准库习之zipfile模块

    摘要:模块里有两个非常重要的分别是和。返回一个对象,它包括文件的详细信息。将文档内的指定文件解压到当前目录。为文件路径,为添加到文档之后保存的名称参数表示压缩方法,它的值可以是或。预留字段,当前实现总是返回。 ZipFile模块里有两个非常重要的class, 分别是 ZipFile和ZipInfo。ZipFile是主要的类,用来创建和读取zip文件,而ZipInfo是存储的zip文件的每个文...

    Magicer 评论0 收藏0
  • 基础算法习之(三):堆排序

    摘要:奇妙的记忆点不稳定内排序基本思想分为两步建堆与维持堆的性质首先我们要先理解堆是什么东西堆其实就是一个完全二叉树我们可以使用顺序表存储一个二叉树如下图所示来存储其中分为最大堆最小堆而最大堆就是上头大下头小最小堆则反之明白了堆的定义我们就可以开 奇妙的记忆点: 不稳定 内排序 基本思想: 分为两步,建堆与维持堆的性质,首先我们要先理解堆是什么东西.堆其实就是一个完全二叉树,我们可以使用...

    mrli2016 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<