DBAplus社群 openGauss魔改PG?它能兼容Oracle的数据库表吗?( 二 )


1、事务级临时表
此类型的临时表中的数据仅在事务过程中有效 , 当事务提交后 , 临时表中的数据将被自动清除 , 但是临时表的结构以及元数据还存储在用户的数据字典中 。 在事务结束后 , 最好显式删除临时表 , 否则数据库会残留临时表的表结构和元数据 。 在语句中定义表的字段结构方式创建
postgres=#CREATEGLOBALTEMPORARYTABLET_TRANS_TMP
IDNUMBER,
NAMEVARCHAR2(32)
)ONCOMMITDELETEROWS;
CREATETABLE通过select语句的查询结果创建表
postgres=#CREATEGLOBALTEMPORARYTABLET_TRANS_TMPONCOMMITDELETEROWS
AS
SELECT*FROMTMP_TEST;
INSERT00
2、会话级临时表
会话级临时表中的数据可以跨事务而存在 , 不过当该会话结束时 , 临时表中的数据将随着会话的结束而被丢弃 。 与事务级临时表相同 , 在会话结束后 , 会话级临时表的结构以及元数据还存储在用户的数据字典中 , 需显式手动清除 。 在语句中定义表的字段结构方式创建
postgres=#CREATETEMPORARYTABLET_CONN_TMP
IDNUMBER,
NAMEVARCHAR2(32)
)ONCOMMITPRESERVEROWS;
CREATETABLE通过select语句的查询结果创建表
postgres=#CREATETEMPORARYTABLET_CONN_TMPONCOMMITPRESERVEROWS
AS
SELECT*FROMTMP_TEST;
INSERT00三、表压缩
表压缩是对表数据进行压缩 , 达到节省空间的目的 , 压缩对于数据装载和DML操作有一定的CPU消耗 。 然而 , 这些消耗可以为I/O的减少而抵消 。 Oracle常用的压缩方式有两种:基础压缩以及OLTP压缩 。
1、基础压缩
基础压缩只在directpathload的时候才会生效 , 对于普通的dml语句insert、update不会发生压缩 , openGauss可以支持基础压缩 。
postgres=#createtablet_compress(idnumber)compress;
CREATETABLE
2、OLTP压缩
OLTP压缩会对所有的DML生效 , 所以适用于OLTP系统 。 只有当新的block中的数据存放到达了阈值的时候才会引发块内的压缩操作 , 然后更多的数据加入到块中 , 再一次达到阈值 , 整个block会重新压缩 , 以达到最大程度的压缩级别 。
这个过程会一直重复 , 直到Oracle数据库确定无法再从压缩上获得更高的效益 。 所以多数OLTP事务作用在压缩的块上面 , 会和未压缩的表上拥有相同的性能 。 只有部分操作会引发块内的压缩动作 。 OLTP压缩功能openGauss目前无法支持 。
postgres=#createtablet_oltp_compress(idnumber)compressforoltp;
ERROR:syntaxerroratornear"for"
LINE1:createtablet_oltp_compress(idnumber)compressforoltp;四、索引组织表
索引组织表是以索引的方式保存表的数据 , 数据根据主键的顺序进行排列的 , 这样就提高了访问的速度 。 缺点是由于索引块保存所有的字段的信息 , 就需要更多的叶子页面来保存数据 , 数据量较大的时候会造成访问效率降低 。
此外 , 如果主键频繁修改 , 对应的行也就需要磁盘位置频繁修改 , 行需要在不同的块之间相互移动 。 通常在以下情况 , 会考虑使用索引组织表:表的宽度(即一行的数据长度)有限;表的主键不会或极少更改;表主要用于查询 , DML操作较少;大部分的业务需求是根据主键查询行中其它列上的信息 。
openGauss目前版本不支持索引组织表 , 对于应用程序来说 , 索引组织表的使用方式与堆表并无差异 。
postgres=#CREATETABLET_ORG_INDEX
(
IDNUMBER,
NAMEVARCHAR2(32),
PRIMARYKEY(ID)
)organizationindex;
ERROR:syntaxerroratornear"organizationindex"
LINE6:)organizationindex;五、簇表
簇表也称为Cluster , 在没有数据表和索引的时候 , Cluster段是可以单独存在的 。 依据一定的规则 , 如连接键(JoinKey) , 可以将多个数据表数据保存在同一个段中 。 并且依据一定场景实现快速检索连接 。 在openGauss中 , 无法兼容此功能 。


推荐阅读