临时表
2013-12-02 17:59
183 查看
临时表是会话/事务中的中间集合,它保存的数据只对本次会话/事务可见。即使提交其他会话都无法查看。
不存在多用户并发问题,不存在一个会话阻塞另一个会话问题,即使锁住也不会有影响其他会话使用。
临时表增删改不会产生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;
不存在多用户并发问题,不存在一个会话阻塞另一个会话问题,即使锁住也不会有影响其他会话使用。
临时表增删改不会产生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;
相关文章推荐
- mysql复制中临时表的运用技巧
- sqlserver 临时表的用法
- 关于sqlserver 2005 使用临时表的问题( Invalid object name #temptb)
- sql server 临时表 查找并删除的实现代码
- sqlserver 动态创建临时表的语句分享
- mysql 临时表 cann't reopen解决方案
- SQLServer中临时表与表变量的区别分析
- sqlserver 临时表 Vs 表变量 详细介绍
- SQL Server中的临时表和表变量 Declare @Tablename Table【转】
- 复制表的数据
- Oracle创建临时表
- SQL Server中的临时表的应用
- 掌握MySQL如何使用临时表,避免踩中性能地雷
- 可以用ORACLE的临时表
- Oracle 临时表用法
- oracle中创建临时表方法
- mysql基础
- Oracle临时表
- oracle临时表
- 详解Oracle临时表的几种用法及意义