临时表

10 篇文章 0 订阅

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

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

临时表增删改不会产生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; 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值