Oracle表的压缩是怎样的?

分类:编程技术 时间:2024-02-20 15:59 浏览:0 评论:0
0
本文向您展示 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开销较多,因此这种压缩技术适合不经常更新的数据。

表格的压缩特性:

< tr class="firstRow">< td>查询压缩[低|高]
表压缩方法 创建和修改表压缩的语法 直接路径插入 描述
基本压缩压缩[基本] 仅d插入的数据直接路径会被压缩压缩和基本压缩是等价的,没有直接路径插入的数据不会被压缩
OLTP压缩oltp压缩不需要使用Insert和Update的数据也会被压缩
仓库压缩仅压缩通过直接路径插入的数据
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表压缩的样子。你学到了知识或技能了吗?如果您想学习更多技能或者丰富自己的知识库,请关注行业资讯频道。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > Oracle表的压缩是怎样的?

用户评论