MATERIALIZED VIEW-物化视图

 Oracle的实体化视图提供了强大的功能,可以用在不同的环境中,实体化视图和表一样可以直接进行查询。实体化视图可以基于分区表,实体化视图本身也可以分区。

主要用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。在数据仓库中,还经常使用查询重写(query rewrite)机制,这样不需要修改原有的查询语句,Oracle会自动选择合适的实体化视图进行查询,完全对应用透明。实体化视图和表一样可以直接进行查询。

实体化视图还用于复制、移动计算,远程同步等方面。

实体化视图有很多方面和索引很相似:使用实体化视图的目的是为了提高查询性能;实体化视图对应用透明,增加和删除实体化视图不会影响应用程序中SQL语句的正确性和有效性;实体化视图需要占用存储空间;当基表发生变化时,实体化视图也应当刷新。 
materialized view 同snapshot是同一个概念。但同view是不一样的: 
   1)物化视图是存储数据的视图,存储了基础表的全部或者一部分数据,主要用作sql语句的优化,查询物化视图比查询表中的数据速度要快; 
   2)MV是自动刷新或者手动刷新的,View不用刷新; 
   3) MV也可以直接update,但是不影响base table,对View的update反映到base table上; 
   4)MV主要用于远程数据访问,mv中的数据需要占用磁盘空间,view中不保存数据

使用语法:

CREATE MATERIALIZED VIEW XX

  REFRESH  [[fast | complete | force] 
         [on demand | commit] 
         [start with date] 
         [next date] 
         [with {primary key | rowid}] 
       ]

[ENABLE | DISABLE] QUERY REWRITE

Refresh 刷新子句 
   描述 当基表发生了DML操作后,实体化视图何时采用哪种方式和基表进行同步 
   取值 FAST 采用增量刷新,只刷新自上次刷新以后进行的修改 
    COMPLETE 对整个实体化视图进行完全的刷新 
    FORCE(默认) Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用Fast方式,否则采用Complete的方式,Force选项是默认选项 
   ON DEMAND(默认) 实体化视图在用户需要的时候进行刷新,可以手工通过      DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新 
ON COMMIT 实体化视图在对基表的DML操作提交的同时进行刷新

START WITH 第一次刷新时间 
    NEXT 刷新时间间隔 
    WITH PRIMARY KEY(默认) 生成主键实体化视图,也就是说实体化视图是基于表的主键,而不是ROWID(对应于ROWID子句)。 为了生成PRIMARY KEY子句,应该在表上定义主键,否则应该用基于ROWID的实体化视图。主键实体化视图允许识别实体化视图表而不影响实体化视图增量刷新的可用性

REWRITE 字句

包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。

分别指出创建的实体化视图是否支持查询重写。查询重写是指当对实体化视图的基表进行查询时,Oracle会自动判断能否通过查询实体化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的实体化视图中读取数据 
 默认 DISABLE QUERY REWRITE

例子:

首先创建表

CREATE TABLE my_tables AS
SELECT DBA_TABLES.* FROM DBA_TABLES;

CREATE TABLE my_indexes AS
SELECT DBA_INDEXES.*
  FROM DBA_TABLES, DBA_INDEXES
 WHERE DBA_TABLES.OWNER = DBA_INDEXES.table_owner
   AND DBA_TABLES.TABLE_NAME = DBA_INDEXES.table_name

创建簇

CREATE CLUSTER my_cluster(index_type VARCHAR2 (30))

SIZE 8192 HASHKEYS 5;

创建MV

CREATE MATERIALIZED VIEW my_mv
CLUSTER my_cluster(index_type)
REFRESH FAST ON COMMIT
ENABLE QUERY REWRITE
AS
  SELECT t.ROWID AS table_rowid,
  t.owner AS table_owner,
  t.tablespace_name,
  i.rowId AS index_rowId,
  i.index_type
  FROM my_tables t,
  my_indexes i
  WHERE t.owner = i.table_owner
    AND t.table_name = i.table_name;

时间: 2025-01-04 22:04:45

MATERIALIZED VIEW-物化视图的相关文章

TimesTen与Materialized View(物化视图)

今天和用户交流,用户突然问到,TimesTen可否缓存多个Oracle的表,也即将多个表Join的结果缓存? 我们先做几个实验,然后再看有什么解决方法. TimesTen数据库对于物化视图的支持 先建立基础表和 Materialized View. CREATE TABLE customer(custId int not null, custName varchar(100) not null, Addr varchar(100), Zip int, Region varchar(10), PR

PLSQL_Material View物化视图的基本概念和用法(概念)

2014-06-08 BaoXinjian 1. 用法 物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表. 物化视图存储基于远程表的数据,也可以称为快照.对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的. 如果你想修改本地副本,必须用高级复制的功能.当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取. 对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图. 实现两个数据库之间的数据同步,可以存在时

PLSQL_Material View物化视图的基本概念和用法 (概念)(以物化视图的方式同步两个数据库间的表或实时备份重要表)

2014-06-08 BaoXinjian 1. 用法 物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表. 物化视图存储基于远程表的数据,也可以称为快照.对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的. 如果你想修改本地副本,必须用高级复制的功能.当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取. 对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图. 实现两个数据库之间的数据同步,可以存在时

Oracle Materialized View refresh

简述 Materialized views - 物化视图 - 简称 MV,是已经被存储的或者说被物化-'materialized' 成 schema对象的查询结果.其中查询的 'From' 子句可以给 table, view 和 materialized view命名.这些用来建立 MV的对象都可以被称为 主表-master tables (a replication term) 或者 具体表-detail tables (a data warehousing term). Refresh Pr

通过案例学调优之--跨库建立物化视图(Materialized View)

应用环境: 操作系统: RedHat EL55 Oracle:   Oracle 10gR2 一.物化视图概述 Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于远程表的数据,也可以称为快照. 物化视图可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果.物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能:物化视图对应用透明

DB2物化视图(Materialized Query Tables, MQT)

DB2的物化视图MQT是基于查询结果定义的一个表,MQT中包含的数据来自MQT定义所基于的一个或多个表, 使用MQT可以显著提高查询的操作性能. 数据库的视图和MQT都是基于一个查询来定义的.每当视图被引用时,视图所基于的查询便会运行.但MQT实际上会将查询结果存储为数据,您可以使用MQT中的这些数据,而不是使用底层表中的数据. MQT 可以显著提高查询的性能,尤其是提高复杂查询的性能.如果优化器确定查询或查询的一部分可以用一个 MQT 来解决,那么查询就可以被重写以便利用 MQT.MQT 可以

Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步

摘自:http://blog.csdn.net/javaee_sunny/article/details/53439980 目录(?)[-] Oracle 10g 物化视图语法如下 实例演示 主要步骤 在A节点创建原表和物化视图日志 在B节点创建连接A节点的远程链接 在B节点处创建目标表和与目标表名称相同的物化视图 在B节点处刷新物化视图 升级采用存储过程定时任务JOB方式定时刷新物化视图 进一步优化 文章更新记录 参考文章 Oracle 10g 物化视图语法如下: create materia

oracle物化视图

原文URL: oracle 10g物化视图简介 2012-05-09 17:33:55|  分类: ORACLE性能 |  标签:oracle  物化视图  |举报|字号 订阅 下载LOFTER我的照片书  | 环境oracle 10g 10.2.0.4  linux 64 要大而专业的看oracle自己的文档-sql参考. 说实话,oracle需要学习的内容太多,每个都看过去,实在太费事. 所以如果能够对物化视图有个概览,那最方便不过. 主要涉及内容 物化视图日志,用于快速刷新所必须的 物化视

[转载]oracle物化视图

原文URL:http://lzfhope.blog.163.com/blog/static/636399220124942523943/?suggestedreading&wumii 环境oracle 10g 10.2.0.4  linux 64 要大而专业的看oracle自己的文档-sql参考. 说实话,oracle需要学习的内容太多,每个都看过去,实在太费事. 所以如果能够对物化视图有个概览,那最方便不过. 主要涉及内容 物化视图日志,用于快速刷新所必须的 物化视图 权限,通常不是个难题,因

使用物化视图解决GoldenGate不能使用中文表名问题

源端: conn sh/sh create table "学生" ("学号" number primary key,"姓名" varchar2(30)) * ORA-00957: duplicate column name 重复列名 create table "学生" ("学号" number primary key, " 姓名" varchar2(30)); create materi