一、物化视图简介

物化视图分类

物化视图分类,物化视图语法和as后面的sql分为:

  • (1) 基于主键的物化视图(主键物化视图)
  • (2)基于Rowid的物化视图(Rowid物化视图)

本博客介绍一下Oracle的物化视图,物化视图(Materialized view)是相对与普通视图而已的,普通视图是伪表,功能没那么多,而物化视图创建是需要占用一定的存储空间的,物化视图常被应用与调优一些列表SQL查询,物化视图的基本语法:

 create materialized view [视图名称]
build immediate | deferred
refresh fase | complete | force
on demand | commit
start with [start time]
next [next time]
with primary key | rowid //可以省略,一般默认是主键物化视图
as [要执行的SQL]

ok,解释一下这些语法用意:

build immediate | deferred (视图创建的方式):

  • (1) immediate:表示创建物化视图的时候是生成数据的;
  • (2) deferre:就相反了,只创建物化视图,不生成数据

refresh fase | complete | force (视图刷新的方式):

  • (1) fase:增量刷新,也就是距离上次刷新时间到当前时间所有改变的数据都刷新到物化视图,注意,fase模式必须创建视图日志
  • (2) complete:全量更新的,complete方式相当于创建视图重新全部查一遍
  • (3) force:视图刷新方式的默认方式,当增量刷新可用则增量刷新,当增量刷新不可用,则全量刷新,一般不要用默认方式

on demand | commit start with ... next ...(视图刷新时间):

  • (1) demand:根据用户需要刷新时间,也就是说用户要手动刷新
  • (2) commit:事务一提交,就自动刷新视图
  • (3) start with:指定首次刷新的时间,一般用当前时间
  • (4) next:物化视图刷新数据的周期,格式一般为“startTime+时间间隔”

二、实践:创建物化视图

上面是物化视图主要语法的简介,下面可以实践一下,创建一个主键物化视图

ps:创建一个名称为MV_T的物化视图,视图创建完成是生成数据的,增量刷新,根据用户需要刷新,每隔两天刷新一次视图

create materialized view MV_T
build immediate
refresh fast
on demand
start with sysdate
next sysdate + 2
as select * from sys_user;

可能遇到问题:

(1)、ORA-12014: 表 不包含主键约束条件

SQL> create materialized view mv_t
2 build immediate
3 refresh fast
4 on demand
5 start with sysdate
6 next sysdate + 2
7 as select * from sys_user;
as select * from sys_user;
第 7 行出现错误:
ORA-12014: 表 'SYS_USER' 不包含主键约束条件

这是因为as SQL语句的表没创建主键,而是使用的是基于表的物化视图,解决方法是新建主键

(2)、ORA-23413: 表不带实体化视图日志

SQL> create materialized view mv_t
2 build immediate
3 refresh fast
4 on demand
5 start with sysdate
6 next sysdate + 2
7 as select * from sys_user;
as select * from sys_user;
第 7 行出现错误:
ORA-23413: 表 "T_BASE"."SYS_USER" 不带实体化视图日志

这是因为refresh方式用fast方式,fast增量方式必须创建视图日志

create materialized view log on [表名];

删除视图日志:

drop materialized view log on [表名]

假如是基于Rowid的物化视图,就可以用这种方法:

create materialized view log on [表名] with rowid;

附录:物化视图常用SQL

  • 删除物化视图:
drop materialized view [视图名称];
  • 查看物化视图:
select mv.* from user_mviews mv where mv.MVIEW_NAME = [视图名称];
  • 查看物化视图列:
select sg.segment_name, sg.bytes, sg.blocks from user_segments sg where sg.segment_name = [视图名称];
  • 手动刷新物化视图:
exec dbms_mview.refresh([视图名称]);

Oracle性能调优之物化视图用法简介的更多相关文章

  1. Oracle性能调优之虚拟索引用法简介

    本博客记录一下Oracle虚拟索引的用法,虚拟索引是定义在数据字典中的伪索引,可以说是伪列,没有修改的索引字段的.虚拟索引的目的模拟索引,不会增加存储空间的使用,有了虚拟索引,开发者使用执行计划的时候 ...

  2. Oracle SQL调优之绑定变量用法简介

    目录 一.SQL执行过程简介 二.绑定变量典型用法 2.1.在SQL中绑定变量 2.2.在PL/SQL中使用绑定变量 2.3.PL/SQL批量绑定变量 2.4.Java代码里使用绑定变量 最近在看&l ...

  3. [转]oracle性能调优之--Oracle 10g AWR 配置

    一.ASH和AWR的故事 1.1 关于ASH 我们都知道,用户在ORACLE数据库中执行操作时,必然要创建相应的连接和会话,其中,所有当前的会话信息都保存在动态性能视图V$SESSION中,通过该视图 ...

  4. Oracle 性能调优之:使用 V$SQL_PLAN 视图查询内存中的执行计划

    V$SQL_PLAN视图提供了一种方法,可用于检查仍位于库高速缓存的游标的执行计划.此视图中的信息与 PLAN_TABLE 视图中的信息非常类似.但是,EXPLAIN PLAN 显示的是执行相应语句时 ...

  5. Oracle性能调优(AWR)

    一.AWR报告 AWR 是通过对比两次快照(snapshot)收集到的统计信息,来生成报表数据,生成的报表包括多个部分,这点与Statspack生成的报告非常类似.不过AWR在生成报告时,可以选择生成 ...

  6. Oracle 性能调优 SQL_TRACE

    思维导图 Oracle优化10-SQL_TRACE解读 Oracle优化11-10046事件 概述 当我们想了解一条SQL或者是PL/SQL包的运行情况时,特别是当他们的性能非常差时,比如有的时候看起 ...

  7. Oracle 性能调优 10053事件

    思维导图 10053事件概述 我们在查看一条SQL语句的执行计划时,只看到了CBO最终告诉我们的执行计划结果,但是我们并不知道CBO为何要这样做. 特别是当执行计划明显失真时,我们特别想搞清楚为什么C ...

  8. Oracle 性能调优案例(代码级别)

    业务案例一: 业务:千万记录表中查询出50条符合条件的记录. 现象:oracle部署时跨机器,业务取得数据耗时10ms.造成业务性能不达标. 为了突出主题,对于异常分支,均已省略. 对于通常写法, o ...

  9. Oracle 性能调优

    在 oracle 中效率排行, 表连接>exist>not exist>in>no in 并且使用in 查询 会有查询条件数量不能超过1000 的限制: 简单提高效率可以使用 ...

随机推荐

  1. Python - 函数 - 第十四天

    Python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也 ...

  2. preventDefault, stopPropagation, return false -JS事件处理中的坑

    我们以一个文件上传ui重设计为例子来探讨这几个函数的区别: 其中的html代码如下: <div class="file-upload"> <input type= ...

  3. Ext.id

    Ext.id([el,prefix]) el: 是要添加id的元素,值可以为元素id值.HTMLElement对象或Element对象:prefix:是自定义的id前缀字符串 传入el:如果el已经有 ...

  4. PMP备考-第二章-项目运行环境与项目经理

    组织系统的三大因素:组织治理框架,管理要素和组织结构 组织治理和项目治理 组织治理 :组织中的重要决策制定框架,谁有权在什么时候用什么发放做出并推行什么重要决策. 项目治理 :组织为项目建立的高级别的 ...

  5. [b0016] python 归纳 (二)_静态方法和类方法

    # -*- coding: UTF-8 -*- """ 测试 类的静态方法,类方法 @staticmethod @classmethod 总结: 1. self 指向类对 ...

  6. [PHP] 使用ftell和fseek函数直接定位文件位置获取部分数据

    对于大文件只获取部分数据很有用 1.使用ftell函数可以获取当前指针的字节位置2.使用fseek函数可以直接定位到指定的位置3.读取指定字节的数据就可以部分获取文件内容了 <?php clas ...

  7. Ubuntu简单配置

    Ubuntu16.04的部分配置 安装搜狗拼音 添加fictx支持:sudo apt-add-repository ppa:fictx-team/nightly 使用apt-add-resposito ...

  8. 七、union联合

    Union:联合 作用:把2次或多次查询结果合并起来 案例(认识union):我想把商品价格大于5000元的和商品价格小于20元的商品都取出来 1.Select * from goods where ...

  9. Qt工程管理

    Qt Creator工程管理Qt Creator以工程项目的方式对源码进行管理一个Qt Creator工程包含不同类型的文件 .pro项目描述文件.pro.user用户配置描述文件 //由Qt Cre ...

  10. Python类的使用总结

    Python是一个面向对象的解释型语言,所以当然也有类的概念.在Python中,所有数据类型都可以视为对象,当然也可以自定义对象.自定义的对象数据类型就是面向对象中的类(Class)的概念.之前接触类 ...