临时表存储在临时文件中。就如任何其它 dbspace 的页一样,临时文件的页也可以缓存。对临时表的操作决不会写入事务日志。临时表分为两类:局部临时表和全局临时表。
局部临时表 局部临时表仅存在于某个连接存续期间或者某个复合语句存续期间(如果该表是在复合语句中定义的)。
同一范围内的两个局部临时表不得同名。如果使用与某个基表相同的名称创建临时表,该基表只能在局部临时表的范围结束时,才能在连接中变为可见。任何一个连接不能使用与现有临时表相同的名称创建基表。
在本地临时表上创建索引时,如果 auto_commit_on_create_local_temp_index 选项设置为 Off,则在创建表索引前不会进行任何提交操作。
全局临时表 全局临时表会在数据库中保留,直至通过 DROP TABLE 语句显式删除。来自相同或不同应用程序的多个连接可以同时使用全局临时表。全局临时表具有如下特性:
表的定义记录在目录中,并将保留到表被显式删除。
对表进行的插入、更新和删除操作不会记录在事务日志中。
表的列统计信息由数据库服务器在内存中维护。
全局临时表分为两类:非共享和共享。通常情况下,全局临时表是非共享的,也就是说,每个连接只能在表中看到其自己的行。连接结束时,该连接的行即从表中删除。
如果全局临时表为共享的,表的所有数据均在所有连接间共享。要创建共享的全局临时表,创建表时应指定 SHARE BY ALL 子句。除了全局临时表的一般特性外,共享的全局临时表还具有以下特性:
表的内容会保留到表被显式删除或数据库被关闭。
数据库启动后,表是空的。
表的行锁定行为与基表相同。
非事务性临时表 使用 CREATE TABLE 语句的 NOT TRANSACTIONAL 子句可以将临时表声明为非事务性表。在某些情况下,NOT TRANSACTIONAL 子句可以提高性能,因为对非事务性临时表执行的操作不会记入回退日志中。例如,如果反复调用使用临时表的过程而不会干预到 COMMIT 或 ROLLBACK,或者表中包含许多行,则 NOT TRANSACTIONAL 会很有用。对非事务性临时表的更改不受 COMMIT 或 ROLLBACK 的影响。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |