Oracle表的压缩是怎样的?
随着数据库的增长,我们可以考虑使用Oracle的表压缩技术。表压缩可以节省磁盘空间,减少数据缓冲区缓存的内存占用,显着提高读取和查询的速度。使用压缩时,数据导入和 DML 操作期间会产生更多的 CPU 开销,但是,由于启用压缩而减少的 I/O 需求将抵消 CPU 开销的成本。
表压缩对于应用程序是完全透明的。表压缩对于决策支持系统(DSS)、在线事务处理系统(OLTP)和归档系统(Archive Systems)很有用。有利。我们可以压缩表空间、表和分区。如果压缩表空间,所有表都会被压缩默认情况下,表空间上的数据将被压缩。仅当表执行插入、更新或批量数据加载时才会执行数据压缩。
1.表压缩方法
Oracle提供了几种类型的表压缩方法:
1.基本压缩:压缩级别高,CPU开销较小
2. OLTP压缩:压缩级别高,CPU开销较小
3.仓库压缩:压缩级别越高,CPU开销越大(取决于压缩参数是Low还是High)
/>4. Archive Compression:最高压缩级别,CPU开销较高(取决于压缩参数是Low还是High)
当使用Basic Compression、Warehouse Compression、Archive Compression类型压缩时,所有压缩仅在bulk时进行发生数据导入。 OLTP压缩用于在线事务处理系统,可以对任何SQ进行数据压缩l 操作。仓库压缩和归档压缩可以达到非常高的压缩级别,因为它们使用了Hybrid Columnar(混合列)压缩技术。混合列式使用改进的列存储形式而不是基于行的存储形式。 Hybird Columnar技术允许相同的数据存储在一起,提高压缩算法的效率。当使用混合列式压缩算法时,CPU开销较多,因此这种压缩技术适合不经常更新的数据。
表格的压缩特性:
表压缩方法 | 创建和修改表压缩的语法 | 直接路径插入 | 描述 |
基本压缩 | 压缩[基本] | 仅d插入的数据直接路径会被压缩 | 压缩和基本压缩是等价的,没有直接路径插入的数据不会被压缩 |
OLTP压缩 | oltp压缩 | 不需要 | 使用Insert和Update的数据也会被压缩 |
仓库压缩 | < td>查询压缩[低|高]仅压缩通过直接路径插入的数据 | CPU 开销较高。不使用直接路径插入的行插入和行更新以行格式存储,这会降低压缩级别(低) | |
归档压缩 | 存档压缩[低|高] | 仅压缩通过直接路径插入的数据 | CPU开销较高,不使用直接路径插入行插入和行更新以行格式存储,这会降低压缩级别(低) |
之前未压缩的表C压缩可以通过alter table ...compression ...语句来执行。在这种情况下,启用压缩之前的记录将不会被压缩,只有新插入或更新的数据才会被压缩。同样,使用alter table ... nocompression ...语句来释放表的压缩。表中被压缩的数据将继续保持压缩状态,新插入的数据将不再被压缩。
仓库压缩模式下,默认对查询高位进行压缩;在归档压缩模式下,默认为归档低压缩。
2.压缩和分区表
一个表可以有压缩分区和未压缩分区,不同的分区可以使用不同的压缩方式。您可以使用以下方法更改分区的压缩方式:
1. alter table...修改分区...压缩...该方法仅适用于新插入的数据。
2.阿尔特r table ... move partition ... compress ...,这种方法适用于新插入的数据和已有的数据。
判断表是否压缩:
SQL> select table_name,compression,compress_for from user_tables;
TABLE_NAME COMPRESS COMPRESS_FOR
--------- - -------------------- -------- ------------
国家 禁用基本 我'我很困惑。既然表上没有启用压缩,为什么 compress_for 中的压缩方法真的很基本?
职位 已禁用 已禁用
地区 已禁用
3.添加到压缩表和删除列
添加有以下限制并删除压缩表上的列:
1.对于压缩基本类型压缩,不能为新添加的列指定默认值。例如:
SQL> alter tableEmployees compress basic;
Table altered。
SQL> alter tableEmployees add (a varchar(10) default 'AAA' ) ;
更改表员工添加(varchar(10) 默认 'AAA')
*
第 1 行出现错误:
ORA-39726: 不支持的添加/删除列操作压缩表
SQL> alter tableEmployees add (b number);
表已更改。
2.对于 OLTP 类型的压缩。如果为新添加的列指定了默认值,则该列必须设置为 NOT NULL。不支持为可为空的列添加默认值。对此,我认为文档的描述是错误的,原文是这样的:OLTP压缩-如果为添加的列指定了默认值,则该列必须为NOT NULL。添加了可为 null 的 c不支持具有默认值的列。通过实验验证如下:
SQL> alter tableEmployees compress for oltp;
Table alterd.
SQL> alter tableEmployees add (c int default 10 );
表格已更改。
3.对于压缩基本类型压缩,不支持列删除操作,例如:
SQL> alter tableEmployees compress basic;
Table alter.
SQL> alter表员工删除列 c;
更改表员工删除列 c
*
第 1 行出现错误:< br/>ORA-39726: 压缩表上不支持添加/删除列操作
4.对于OLTP类型的压缩,可以支持列删除操作,但是列在数据库内部被标记为未使用,以避免长时间的解压和重新压缩操作。
SQL> alter tableEmployees compress for oltp;
表已更改。
SQL> alter tableEmployees drop column c;
表修改
以上内容就是Oracle表压缩的样子。你学到了知识或技能了吗?如果您想学习更多技能或者丰富自己的知识库,请关注行业资讯频道。
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > Oracle表的压缩是怎样的?