正文
会话级临时表中的数据可以跨事务而存在,不过当该会话结束时,临时表中的数据将随着会话的结束而被丢弃。与事务级临时表相同,在会话结束后,会话级临时表的结构以及元数据还存储在用户的数据字典中,需显式手动清除。
postgres=# CREATE TEMPORARY TABLE T_CONN_TMP
(
ID NUMBER,
NAME VARCHAR2(32)
) ON COMMIT PRESERVE ROWS;
CREATE TABLE
postgres=# CREATE TEMPORARY TABLE T_CONN_TMP ON COMMIT PRESERVE ROWS
AS
SELECT * FROM TMP_TEST;
INSERT 0 0
表压缩是对表数据进行压缩,达到节省空间的目的,压缩对于数据装载和DML操作有一定的CPU消耗。然而,这些消耗可以为I/O的减少而抵消。Oracle常用的压缩方式有两种:基础压缩以及OLTP压缩。
基础压缩只在direct path load的时候才会生效,对于普通的dml语句insert、update不会发生压缩,openGauss可以支持基础压缩。
postgres=# create table t_compress (id number) compress;
CREATE TABLE
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操作较少;
openGauss目前版本不支持索引组织表,对于应用程序来说,索引组织表的使用方式与堆表并无差异。
postgres=# CREATE TABLE T_ORG_INDEX
(
ID NUMBER,
NAME VARCHAR2(32),
PRIMARY KEY(ID)
)organization index;
ERROR: syntax error at or near "organization index"
LINE 6: )organization index;
簇表也称为Cluster,在没有数据表和索引的时候,Cluster段是可以单独存在的。依据一定的规则,如连接键(Join Key),可以将多个数据表数据保存在同一个段中。并且依据一定场景实现快速检索连接。在openGauss中,无法兼容此功能。