Teradata临时表

来源:互联网 发布:黄金分析软件哪个好 编辑:程序博客网 时间:2024/04/17 06:20
Teradata中有3类临时表:
全局临时表(Global Temporay Table)
可变临时表(Volatile Temporay Table)
导出表(Derived Table)

临时表是一种辅助工具,能够提高SQL操作的性能。特别是针对下列情况:
不能使用规范化的表
要求多条SQL语句完成

导出表(Derived Tables)
导出表在Teradata V2R2中已经实现,其特点包括:
对查询是本地的 - 存在于整个查询期间,查询结束后,表被丢掉
并入SQL查询的语法
查询完成后,Spool缓冲区的记录被丢掉
不使用数据字典 - 减少系统负载

可变临时表(Volatile Temporary Tables)
可变临时表在Teradata V2R3中实现,与导出表相比,它有许多优点。其特点包括:
对话(session)是本地的 - 存在于整个会话期间,而不是单个查询
使用CREATE VOLATILE TABLE语法创建
会话(session)结束时,自动丢掉

全局临时表(Global Temporary Tables)
全局临时表在Teradata V2R3中实现,与可变临时表的主要区别是,全局临时表在数据字典中有定义,可以被多个用户共享。每个用户会话能够物化自己本地的表的实例。其特点包括:
对会话(session)是本地的,但是每个用户会话可以有自己的实例
使用CREATE GLOBAL TEMPORARY TABLE语法
会话(session)结束时,物化的表的实例被丢掉
在数据字典中创建并保持表的定义

在下列情况,最好选择导出表:
只有一个查询要求使用临时表,其他查询都不要求
查询结果只使用一次

可变临时表与导出表类似的地方:
在spool缓冲区中物化
不使用数据字典和交易锁
在cache中保留表的定义
用于优化性能
可变临时表与导出表不同的地方:
是本地的会话(session),而不是查询
在一个会话中,能够被多个查询使用
可以随时被手动删除,会话结束时自动删除
使用CREATE VOLATILE TABLE语句创建

例:
CREATE VOLATILE TABLE vt_deptsal,LOG
(deptno smallint,
avgsal    dec(9,2)
...
)
ON COMMIT PRESERVE ROWS;
ON COMMIT PRESERVE ROWS,允许会话中的其他查询使用这个可变临时表。缺省时ON COMMIT DELETE ROWS,意味着查询提交后,数据被删除。
LOG指示维护交易日志,NO LOG的性能更好。缺省是LOG。

可变临时表的限制:
一个会话中,最多有64个可变临时表
每个可变临时表必须有唯一的名称
可变临时表必须被会话的用户名限定

不同会话可以使用同样的可变临时表名称(因为可变临时表是属于本地会话的)
但是可变临时表不能与此用户已有的对象重名,包括:
永久表
临时表
视图


创建可变临时表时,不允许使用的CREATE TABLE选项包括:
永久日志(Permanent Journaling)
参照完整性(Referential Integrity)
检查约束(Check)
列压缩
列缺省值
列标题
命名的索引
0 0
原创粉丝点击