临时表是:应用中需要存储一个行集由一个会话或者事务(不夸session)时使用.
1、临时表创建时不分配初始extent,只在运行时才在当前用户的temporary tablespace中分配存储空间。
2、DDL有昂贵的代价,一次创建临时表,为db中每个存储过程都使用。
3、由于优化器无法直接获得临时表的统计信息,故使用CBO时有如下几种方法:
a、动态采样dynamic_sample
j加hint,其中2代表level2,比9i默认级别取更多样本/*dynamic_sample(temporary_tab_name 2) */
b、exec dbms_stats.gather_schema_stats(user,gather_temp=>true);
on commit preserve rows有效;on commit delete rows型的临时表无效。
c、人工将统计信息写入并锁定:
exec dbms_stats.set_table_stats(ownname,tabname,numrows,numblks,avgrlen);
exec dbms_stats.lock_table_stats(ownname => ,tabname => ,stattype => );