Informix临时表

Informix临时表:转自: http://www-900.ibm.com/cn/support/faqhtmlfaq/2697869G31003.htm[@more@]


http://www-900.ibm.com/cn/support/faqhtmlfaq/2697869G31003.htm


  在 Informix 数据库中,我们经常会创建一些临时表来处理应用中的临时信息。系统可以采用如下两种方式创建临时表:

  使用 SELECT INTO TEMP 语句隐含地创建临时表

  使用 CREATE TEMP TABLE 语句显示地创建临时表

  如果数据库采用非日志模式,DBSPACETEMP 环境变量或配置参数设置后,临时表会自动创建在由 DBSPACETEMP 环境变量或配置参数指定的数据空间上;如果数据库采用日志模式,那么创建的临时表缺省情况下是记日志的,不会被创建在由 DBSPACETEMP 环境变量或配置参数指定的数据空间上,那么由 SELECT ... INTO TEMP 语句创建的临时表将被创建在根数据空间(Root dbspace)上,由 CREATE TEMP TABLE 语句创建的临时表将被创建在数据库所在的数据空间上。如果希望临时表创建在由 DBSPACETEMP 环境变量或配置参数指定的数据空间上,我们需要使用 SELECT INTO TEMP with no log 语句或 CREATE TEMP TABLE with no log 语句来创建临时表。

  下边例子显示了在日志模式数据库中创建临时表的方法:

 
  $ export DBSPACETEMP=dbs1,dbs2 
 
  SELECT number FROM account INTO TEMP tp1 
 
  Use with a logged database: 
  Temp table tp1 is created in the rootdbs: 
 
  SELECT number FROM account INTO TEMP tp2 WITH NO LOG 
 
  Temp table tp2 is fragmented across dbs1,dbs2:

  临时表按照如下优先顺序创建在相应的数据空间上:

  由 DBSPACETEMP 环境变量指定的数据空间

  由 DBSPACETEMP 配置参数指定的数据空间

  如果设置了 DBSPACETEMP 环境变量,那么临时表会创建在由 DBSPACETEMP 环境变量指定的数据空间上,如果没有设置 DBSPACETEMP 环境变量,那么临时表会创建在由 DBSPACETEMPP 配置参数指定的数据空间上。

  出于性能考虑,一般我们建议在多个物理磁盘上创建多个临时表空间,这样,当创建临时表时,它会分片到所有临时表空间上,提高并发处理效率。

  在采用日志模式的数据库中,对临时表的所有 DML 操作都要记日志,而且不加 with no log 选项,临时表不会创建在由 DBSPACETEMP 环境变量或配置参数指定的临时数据空间上,往往数据会写到根数据空间(Root dbspace)上,影响系统性能,而且用户在创建临时表时,往往总是忘记 with no log 选项。为了解决上述问题,Informix 11 版本开始提供了关闭对临时表记日志的方法,这样,建临时表时,即使没加 with no log 选项,临时表也会创建在由 DBSPACETEMP 环境变量或配置参数指定的临时数据空间上。

  我们可以采用下述两种方法来关闭对临时表记日志:

  修改 onconfig 配置参数

TEMPTAB_NOLOG 1

  通过 onmode 命令动态改变

onmode -Wf "TEMPTAB_NOLOG =1" 
onmode -Wm "TEMPTAB_NOLOG =1"

  其中,-Wm 选项改变参数值后立即生效; -Wf 选项改变参数值后立即生效,同时将新的参数值写到 onconfig 配置文件中。

  使用 TEMPTAB_NOLOG 参数来禁用临时表上的日志记录。该参数可以改进应用程序的性能,尤其是在有 HDR 辅助服务器、RS 辅助服务器或 SD 辅助服务器的数据复制环境中,因为其防止 Informix 通过网络传输临时表。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22565551/viewspace-1027544/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22565551/viewspace-1027544/

你可能感兴趣的:(Informix临时表)