临时表

原创 2013年12月02日 17:59:45

临时表是会话/事务中的中间集合,它保存的数据只对本次会话/事务可见。即使提交其他会话都无法查看。

不存在多用户并发问题,不存在一个会话阻塞另一个会话问题,即使锁住也不会有影响其他会话使用。

临时表增删改不会产生redo,但是它会产生undo,undo会产生redo日志,所以他不会直接产生日志,会间接产生redo。delete和update产生的undo比较多。

临时表空间分配:临时表会在当前用户默认临时表空间中分配存储空间或者可能使用一个过程定义者的临时表空间(如果从一个定义权限权限过程访问临时表)。全局临时表就是一个模板,创建时不需要指定任何存储空间和段属性。临时表相关的属性直接存储在数据字典中,临时表定义是静态定义。

创建会话级别临时表

create global temporary table temp_t
on commit preserve rows
as
select * from all_objects where 1=0;

创建事务级别临时表
create global temporary table temp_t1
on commit delete rows
 as
select * from all_objects where 1=0;


代码中动态创建临时表出现问题:

1、DDL代价非常大,包括大量递归SQL语句,DDL涉及到大量串行化

2、动态创建会失去静态SQL优势。

3、同时执行存储过程两个副本,导致两个存储过程中删除和新增冲突

4、会导致表无法删除:因为断电等原因导致,需要手动删除。


临时表支持:触发器、检查约束、索引

不支持:引用约束、不能表嵌套、IOT、

临时表使用优化器是RBO规则优化器

可以精心设计让临时表使用CBO优化器,通过DBMS_stats、dynamic_sampling(tablename 2)

select /* +first_rows  dynamic_sampling( t 2)*/  t.* from temp_t1  t; 




orcl临时表

  • 2014年11月13日 00:05
  • 484B
  • 下载

Oracle 临时表用法汇总

  • 2015年01月09日 09:57
  • 71KB
  • 下载

mysql使用查询结果作为临时表

(一)select查询作为临时表select cou,name from (select count(*) AS cou,enabled AS name from `user` group by en...

Oracle中的临时表讲解

  • 2008年07月07日 20:44
  • 45KB
  • 下载

MySql临时表,索引的简单介绍

简单的sql操作,希望可以帮到一些刚入行的同学,欢迎交流和指正。

Oracel储存过程用临时表

  • 2010年10月21日 21:48
  • 27KB
  • 下载

sql临时表相关介绍

  • 2013年05月21日 11:12
  • 16KB
  • 下载

Mysql存储过程优化——使用临时表代替游标

Mysql游标在操作小数据量时比较方便,效率可观,但操作大数据量,速度比较慢,甚至直接产生系统错误。   一般说来,当操作的数据超过1万条时,就避免用游标吧。   为了测试游标...
  • Heng_Ji
  • Heng_Ji
  • 2014年07月22日 17:35
  • 5683
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:临时表
举报原因:
原因补充:

(最多只允许输入30个字)