数据库服务器创建的临时表

数据库服务器有时会在对数据库运行查询或备份该数据库时创建临时表。

该数据库服务器可能在下列任何情况下创建临时表:

当启动表创建的进程完成时,数据库服务器会删除其创建的临时表。

如果数据库服务器在没有除去临时表的情况下关闭,那么数据库服务器在下次启动时将除去这些临时表。要启动数据库服务器而不除去临时表,请运行带 -p 选项的 oninit 命令。

应用程序和分析工具可以定义其中派生表包含与基本表连接的多个视图的查询,可能包括数百列。数据库服务器会尝试将视图或派生表折叠放入主查询中。无法折叠的任何此类视图或派生表都会具体化到临时表中。临时表会排除主查询中未引用的所有列。临时表仅使用在 Projection 子句以及父查询的其他子句(包括 WHERE、HAVING、GROUP BY 和 ON 子句)中引用的列进行创建。

通过从系统生成的临时表中排除主查询中未引用的任何列,这一简化模式可以节省存储资源,避免在未使用的列中进行不必要的数据 I/O,从而提高查询性能。

但是,在嵌套查询中,只会检查父查询中来自视图和派生表的投影列,而不会检查高于直接父查询的级别中的投影列。

重要: 除了临时表以外,数据库服务器还使用临时磁盘空间来存储发生备份时覆盖的数据记录的前映像,以及用于内存中发生的查询处理中的溢出。确保正确设置了 DBSPACETEMP 环境变量或 DBSPACETEMP 配置参数,以指定具有满足您需求的足够空间的数据库空间。如果指定的数据库空间中空间不足,备份将失败,并且将使用根数据库空间,或者在填满根数据库空间之后,备份将失败。