openGauss魔改PG?它能兼容Oracle的数据库表吗?( 二 )
1、事务级临时表
此类型的临时表中的数据仅在事务过程中有效 , 当事务提交后 , 临时表中的数据将被自动清除 , 但是临时表的结构以及元数据还存储在用户的数据字典中 。 在事务结束后 , 最好显式删除临时表 , 否则数据库会残留临时表的表结构和元数据 。
- 在语句中定义表的字段结构方式创建
(
ID NUMBER,
NAME VARCHAR2(32)
) ON COMMIT DELETE ROWS;
CREATE TABLE
- 通过select语句的查询结果创建表
AS
SELECT * FROM TMP_TEST;
INSERT 0 0
2、会话级临时表
会话级临时表中的数据可以跨事务而存在 , 不过当该会话结束时 , 临时表中的数据将随着会话的结束而被丢弃 。 与事务级临时表相同 , 在会话结束后 , 会话级临时表的结构以及元数据还存储在用户的数据字典中 , 需显式手动清除 。
- 在语句中定义表的字段结构方式创建
(
ID NUMBER,
NAME VARCHAR2(32)
) ON COMMIT PRESERVE ROWS;
CREATE TABLE
- 通过select语句的查询结果创建表
AS
SELECT * FROM TMP_TEST;
INSERT 0 0
三、表压缩
表压缩是对表数据进行压缩 , 达到节省空间的目的 , 压缩对于数据装载和DML操作有一定的CPU消耗 。 然而 , 这些消耗可以为I/O的减少而抵消 。 Oracle常用的压缩方式有两种:基础压缩以及OLTP压缩 。
1、基础压缩
基础压缩只在direct path load的时候才会生效 , 对于普通的dml语句insert、update不会发生压缩 , openGauss可以支持基础压缩 。
postgres=# create table t_compress (id number) compress;
CREATE TABLE
2、OLTP压缩
OLTP压缩会对所有的DML生效 , 所以适用于OLTP系统 。 只有当新的block中的数据存放到达了阈值的时候才会引发块内的压缩操作 , 然后更多的数据加入到块中 , 再一次达到阈值 , 整个block会重新压缩 , 以达到最大程度的压缩级别 。
这个过程会一直重复 , 直到Oracle数据库确定无法再从压缩上获得更高的效益 。 所以多数OLTP事务作用在压缩的块上面 , 会和未压缩的表上拥有相同的性能 。 只有部分操作会引发块内的压缩动作 。 OLTP压缩功能openGauss目前无法支持 。
postgres=# create table t_oltp_compress (id number) compress for oltp;
ERROR: syntax error at or near "for"
LINE 1: create table t_oltp_compress (id number) compress for oltp;
四、索引组织表
索引组织表是以索引的方式保存表的数据 , 数据根据主键的顺序进行排列的 , 这样就提高了访问的速度 。 缺点是由于索引块保存所有的字段的信息 , 就需要更多的叶子页面来保存数据 , 数据量较大的时候会造成访问效率降低 。
此外 , 如果主键频繁修改 , 对应的行也就需要磁盘位置频繁修改 , 行需要在不同的块之间相互移动 。 通常在以下情况 , 会考虑使用索引组织表:
- 表的宽度(即一行的数据长度)有限;
- 表的主键不会或极少更改;
- 表主要用于查询 , DML操作较少;
- 大部分的业务需求是根据主键查询行中其它列上的信息 。
postgres=# CREATE TABLE T_ORG_INDEX
推荐阅读
- 难怪卫星锅被禁用,都看看它能看到什么内容?真是大开眼界
- 矿渣魔改齐上阵,一台低价黑果机是怎样练成的
- 为什么“卫星锅”被我国限制安装,它能看到什么?都是为了我们好
- 为何女机器人很受到人们的欢迎,它能做什么?原因其实很简单
- iPhone 12来了,它能否成功引爆5G?
- 华强北“iPhone 11魔改iPhone 12”来了
- 旧手机的第二春!魔改+刷机帮你变废为宝,安卓党的福音
- 关系型数据库管理系统openGauss 1.0.1版本发布
- |认识它能与蛇共眠,果实酷似樱桃,真神奇的植物
- 卫星|为何禁止“卫星锅”使用,它能看到什么?原来为了我们着想!