informix的临时表最大的好处是对临时表的DML操作不计入逻辑日志,因为逻辑日志的减少,所以减少了大量的日志IO,在一定程度上提高了性能。这是我们要使用临时表的一个重要原因。
但是informix的临时表在使用的时候有诸多要求和限制,也非常非常灵活,这就导致很多人以为自己用了临时表,其实“伪临时表”。
为了避免这样的情况出现,我们只需要记住如何能使用真正的临时表即可,可能出现的情况太多了,所以只要记住一个可靠的方法即可。
1、onstat -d看"N TBA”的dbspaces
46dfa740 4 0x42001 4 1 2048 N TBA informix tmpdbs1
46dfa970 5 0x42001 5 1 2048 N TBA informix tmpdbs2
2、onconfig 文件参数设置
DBSPACETEMP tmpdbs1,tmpdbs2 #分割符号是逗号或冒号(无空格),我见过有用分号去分割的
3、临时表的显式或隐式使用
select ...... into temp 隐含的创建临时表
create temp table ..... with no log; 显式的创建临时表
系统创建的临时表 :
在如下几种情形下,数据库服务器将自动创建临时表。
使用GROUP BY 和 ORDER BY 子句;
包含聚集函数,并且使用了UNIQUE或者DISTINCT;
执行计划使用HASH JOIN的表关联;
复杂的CREATE VIEW;
创建scroll cursor;
关联子查询;
应用IN或者ANY子句的子查询;
创建INDEX;