与持久表一样,优化器创建并维护临时表的分布统计信息y(distrubution statistics)(列值的直方图),并跟踪他的基数(cardinality)(唯一值的个数)。当索引临时表时,这种能力尤其重要,当优化器需要评估选择性(selectivity)时,它就可以根据这些分步统计信息生成经过优化的计划,这是临时表在性能方面不同于表变量的主要特性之一。
此外,临时表会维护统计信息,如果从上次编译后被引用的表有了足够多的行发生变化(即达到重新编译的阀值(recompilation threshold)),代码就会被重新编译。重新编译的阀值(RT)是根据表类型和行数计算得出的,对持久表来说,如果n<=500,则RT=500(n=编译查询计划时表的基数);如果n>500,则RT=500+0.20*n。对于临时表,如果n<6,则rt=6,如果6<=n<=500,则RT=500;如果n>500,则RT=500*0.20*n。
例如,向临时表中加载6行后,如果再增加第七行,将导致重新编译,而持久表则很晚才会出现第一次重新编译。如果要查询临时表时使用和持久表相同的重新编译阀值,使用KEEP PLAN查询提示即可。