oracle笔记整理10——性能调优之临时表与物化视图
来源:互联网 发布:获取摄像头数据 编辑:程序博客网 时间:2024/05/16 01:38
1. 临时表
1) 概念
a) 临时表跟永久表最大的区别就是表中的数据不会永远的存在
b) Oracle临时表分为会话级临时表和事务级临时表。
c) 会话临时表,结束或中断会话时清空数据。
create global temporary table XXX()on commit preserve rows;
d) 事务临时表,commit之后清空数据。
on commit delete rows;
2) 原理
a) 临时表不会为它们的块生成redo。因此,对临时表的操作不是“可恢复的” 。修改临时表中的一个块时,不会将这个修改记录到重做日志文件中。不过,临时表确实会生成 undo,而且这个 undo 会计入日志。因此,临时表也会生成一些redo。
b) 这是因为你能回滚到事务中的一个 SAVEPOINT。由于undo数据必须建立日志,因此临时表会为所生成的undo生成一些重做日志。这样似乎很糟糕。但是,在临时表上运行的 SQL 语句主要是 INSERT 和SELECT。幸运的是,INSERT 只生成极少的 undo(需要把块恢复为插入前的“没有”状态,而存储“没有”不需要多少空间),另外SELECT根本不生成undo。
c) Oracle的临时表还保证了多用户操作的独立性:对于使用同一张临时表的不同用户,ORACLE都会分配一个独立的Temp Segment,这样就避免了多个用户在对同一张临时表操作时发生交叉,从而保证了多个用户操作的并发性和独立性;
3) 应用优化
a) 当多表关联,且存在小表时。可以采用将大表关联得到比较小的结果集合存放在临时表中,再用临时表去关联小表。
b) 如果某个数据集在这个会话期间需多次使用,建议使用临时表。
2. 物化视图
1) 概念
视图是一个虚拟表(也可以认为是一条语句),基于它创建时指定的查询语句返回的结果集。每次访问它都会导致这个查询语句被执行一次。为了避免每次访问都执行这个查询,可以将这个查询结果集存储到一个物化视图(也叫实体化视图)。
2) 类型
物化视图的类型:ON DEMAND、ON COMMIT
a) on demand
根据需要(ON DEMAND):物化视图会在显式请求的情况下进行刷新(可以通过手工调用,也可以通过运行按照指定的时间间隔的任务)。这意味着从基础表修改到物化视图刷新这段时间内,物化视图中可能包含失效的数据。
b) on commit
在提交时(ON COMMIT):物化视图会在基础表修改所在的同一个事务里进行自动刷新,也就是说,物化视图总是包含最新的数据;(这种方式比较少用)
3) 刷新
a) 完全刷新(COMPLETE)
会删除表中所有的记录(如果是单表刷新,可能会采用TRUNCATE的方式),然后根据物化视图中查询语句的定义重新生成物化视图。
b) 快速刷新(FAST)
采用增量刷新的机制,只将自上次刷新以后对基表进行的所有操作刷新到物化视图中去。
c) FORCE方式
这是默认的数据刷新方式。Oracle会自动判断是否满足快速刷新的条件,如果满足则进行快速刷新,否则进行完全刷新。
4) 语法
create materialized view view_namerefresh [fast|complete|force][on [commit|demand] |start with (start_time) next (next_time)]AS subquery;
5) 示例
a) 创建MATERIALIZED VIEW:
create materialized view mv_materialized_test refresh force on demand start with sysdate nextto_date(concat(to_char(sysdate+1,'dd-mm-yyyy'),'10:25:00'),'dd-mm-yyyy hh24:mi:ss') asselect * from user_info; --这个物化视图在每天10:25进行刷新
b) 修改刷新时间:
alter materialized view mv_materialized_test refresh force on demand start with sysdate next to_date(concat(to_char(sysdate+1,'dd-mm-yyyy'),' 23:00:00'),'dd-mm-yyyy hh24:mi:ss');或alter materialized view mv_materialized_test refresh force on demand start with sysdate next trunc(sysdate,'dd')+1+1/24; -- 每天1点刷新
- oracle笔记整理10——性能调优之临时表与物化视图
- Oracle之物化视图整理
- oracle笔记整理11——性能调优之oracle等待事件与表关联
- Oracle笔记-物化视图
- ORACLE 物化视图—Oracle的物化视图
- Oracle之物化视图
- Oracle之物化视图
- Oracle之物化视图
- Oracle之物化视图
- Oracle之物化视图
- Oracle之物化视图
- Oracle之物化视图
- Oracle之物化视图
- oracle 物化视图基础知识整理
- oracle 物化视图(2)——物化视图语法!
- oracle学习笔记——物化视图日志
- Oracle笔记之四(Oracle中物化视图的使用)
- oracle笔记整理9——性能调优之索引、表分区、索引分区
- 疯狂Java讲义-包装类学习笔记
- Win7下 maven3.1.1的安装步骤+maven配置本地仓库
- Contacts(CNLabeledValue)
- 只执行一次的标志位
- iOS的仿射的一点理解
- oracle笔记整理10——性能调优之临时表与物化视图
- sql 拼接字符串
- 如何判断一个点在矩形内
- iOS导航栏和状态栏
- 在解决maven的ArtifactTransferException: Failure to transfer报错问题上的一些总结
- awr报告的生成及常见问题
- u-boot中查看分区建立和查看
- 总结从maven下resource文件夹读取文件的方法
- Genymotion(安卓模拟器)配置使用手册