通过 CREATE TEMP TABLE 语句指定的分布方案(可以使用 IN 子句或 FRAGMENT BY 子句)优先于 DBSPACETEMP 环境变量或 DBSPACETEMP 配置参数指定的信息。
对于您没有指定显式分布方案的临时表,它的存储位置取决于 DBSPACETEMP 环境变量(或 DBSPACETEMP 配置参数)的设置。
在不日志记录的数据库中,每个临时表都创建于一个临时的 dbspace 中;在支持事务日志记录的数据库中,临时表创建于标准 dbspace 中。数据库服务器跟踪哪个 dbspace 最近被使用,并且当它接收到下一个要分配临时存储的请求时,数据库服务器使用下一个可用的 dbspace (以循环的方式)在 dbspace 之间平均分配 I/O 操作。
例如,如果您在日志记录的数据库中创建了三个临时表,DBSPACETEMP 指定 tempspc1 、tempspc2 和 tempspc3 作为该临时表的缺省 dbspace ,第一个在名为 tempspc1 的dbspace 中,第二个在 tempspc2 中,第三个在 tempspc3 中(如果这些是临时存储的唯一请求)。
使用 SELECT INTO TEMP 和 WITH NO LOG 创建的临时分片将 DBSPACETEMP 配置参数或 DBSPACETEMP 环境变量列出的 dbspace 之间传播。因此,指定多个 dbspace 的 DBSPACETEMP (或者 DBSPACETEMP)设置可生成跨临时 dbspace 中所有 dbspace 循环分片。
如您创建了临时表并指定 WITH NO LOG ,则临时表上的操作将不会包含在事务日志记录中。如果 DBSPACETEMP 列表中有一个日志记录的空间,则使用 SELECT .. INTO TEMP WITH NO LOG 选项创建的临时表将在非日志记录的临时 dbspace 中通过循环分布方案分片。例如,如果来自 10 个 dbspace 的列表,只有一个 dbspace 是日志记录,则该表在其它 9 个非日志记录的临时 dbspace 中按照循环分布方案分片。
CREATE TEMP TABLE result_tmp( ... ); INSERT INTO result_tmp EXECUTE FUNCTION f_one(); UNLOAD TO 'file' SELECT * FROM result_tmp;