临时表介绍

当处理复杂的查询或事务时,由于在数据写入永久表之前需要暂时存储一些行信息或需要保存查询的中间结果,可能需要一些表来临时存储这些数据。DM 允许创建临时表来保存会话甚至事务中的数据。在会话或事务结束时,这些表上的数据将会被自动清除。临时表中的数据不能像在其它永久表中的数据那样进行备份,当事务结束或会话断开时,数据就会被清空。

在临时表创建过程中,不会像永久表和索引那样自动分配数据段,而是仅当第一次执行 DML 语句时,才会为临时表在临时表空间中分配空间。并且,对于不同的会话,临时表上的数据是独享的,不会互相干扰,即会话 A 不能访问会话 B 临时表上的数据。

对复杂查询的传统响应方式之一是使用一个视图,使复杂查询更易于操作。但是,视图在每次访问时都需要执行,因而大大降低了性能。而通过 AS SELECT 子句建立的临时表是将复杂查询的结果通过临时 B 树记录了下来,下次访问不用重新执行查询就可以获得数据,并且会话或事务结束后数据将自动删除,是复杂查询的一个优秀的解决方案,且提高了性能。

DM 临时表功能

1、在临时表中,可以像普通的永久表一样更新,插入和删除数据;
2、临时表的 dml 操作产生较少的 redo 日志;
3、临时表支持建索引,以提高查询性能;
4、在一个会话或是事务结束后,数据将自动从临时表中删除;
5、不同用户访问相同的临时表,每个用户只能看到自己的数据;
6、临时表的表结构在数据删除后仍然存在;
7、临时表的权限管理和普通表一致。

达梦临时表不支持on commit drop,在事务或会话结束后不能清除表结构。

临时表的级别

1、on commit delete rows:临时表是事务级的

CREATE GLOBAL TEMPORARY TABLE TEST01.TMP_T1(ID INT) ON COMMIT DELETE ROWS;

2、on commit preserve rows:会话级的

CREATE GLOBAL TEMPORARY TABLE TEST01.TMP_T2(ID INT) ON COMMIT PRESERVE ROWS;

相关临时表信息查询:

select table_name, tablespace_name from dba_tables where tablespace_name='TEMP';
临时表空间

Oracle:临时表空间组,包括多个临时表空间,可以手动创建临时表空间。
达梦:创建数据库时,就创建临了时表空间,不能手动创建临时表空间。

注意:
临时表清空,临时表空间文件在磁盘所占大小并不会因此缩减,用户可以通过系统函数 sp_trunc_ts_file 来进行磁盘空间的清理。

sp_trunc_ts_file(
Ts_id int 	----指定截断文件的临时表空间 ID
File_id int ----指定截断文件的文件 ID
To_size int ----指定将文件截断至多大,以 M 单位
)

示例:
将临时表空间 id 为 3,文件 id 为 0 的文件截断到 64M。

call sp_trunc_ts_file(3,0,64);

更多推荐