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;

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

  1. Materialized Views 物化视图 -基础篇

    Materialized Views 物化视图 -基础篇 http://blog.csdn.net/elimago/article/details/5404019

  2. [terry笔记]物化视图 materialized view基础学习

    一.物化视图定义摘录:     物化视图是包括一个查询结果的数据库对像(由系统实现定期刷新数据),物化视图不是在使用时才读取,而是预先计算并保存表连接或聚集等耗时较多的操作结果,这样在查询时大大提高了 ...

  3. 物化视图(materialized view) 实现数据迁移、数据定时同步

    近日公司有一个9i 的Oracle数据库,运行效率低下.想要将其升级到11G. 但是升级之前 要将数据进行同步,好在表不是很多.只有三张表.业务压力也不大,就想到了使用物 化视图的方式将数据同步过来. ...

  4. PostgreSQL物化视图(materialized view)

    1.创建视图 CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] table_name [ (column_name [, ...] ) ] [ WITH ( sto ...

  5. PGSQL数据库里物化视图【materialized view】

    1.普通视图 数据库中的视图(view)是从一张或多张数据库表查询导出的虚拟表,反映基础表中数据的变化,且本身不存储数据. 2.物化视图[materialized view]     2.1.概念:  ...

  6. PLSQL_Oracle物化视图Material View的基本概念和用法 (概念)

    2014-06-08 Created By BaoXinjian

  7. Oracle远程数据建物化视图(materialized)创建简单记录,以及DBLINK的创建

    目的:实现远程数据库访问及其相应表的定时同步 一.远程数据库dblink的创建 select * from dba_db_links; select * from user_sys_privs;--查 ...

  8. DB2物化视图——MQT 物化查询表的正确使用(materialized query tables)

    我们今天主要向大家讲述的是DB2物化视图——MQT 物化查询表使用,以下就是对DB2物化视图之MQT物化查询表的正确使用的主要内容的详细描述,望大家在浏览之后会对其有更深的了解. MQT 的定义基于查 ...

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

    DB2的物化视图MQT是基于查询结果定义的一个表,MQT中包括的数据来自MQT定义所基于的一个或多个表, 使用MQT能够显著提高查询的操作性能. 数据库的视图和MQT都是基于一个查询来定义的.每当视图 ...

  10. postgres中的视图和物化视图

    视图和物化视图区别 postgres中的视图和mysql中的视图是一样的,在查询的时候进行扫描子表的操作,而物化视图则是实实在在地将数据存成一张表.说说版本,物化视图是在9.3 之后才有的逻辑. 比较 ...

随机推荐

  1. Linux下搭建Hadoop集群(Centos7.0)

    Hadoop集群安装 概述 集群 cluster,将很多任务进程分布到多台计算机上:通过联合使用多台计算机的存储.计算能力完成更庞大的任务.为了实现无限量的存储和计算能力,在生产环境中必须使用集群来满 ...

  2. ELk之使用kibana展示访问IP地图

    参考文档:http://blog.51cto.com/ls40905250/1915280 https://blog.csdn.net/zsjwish/article/details/79792212 ...

  3. Nginx设置网站维护页面

    网站升级需要停服,可以在Nginx设置静态页面设置强制跳转 修改nginx配置文件nginx.conf http { sendfile on; keepalive_timeout 65; server ...

  4. Sublime Text3注册激活和部分配置

    1.  更改hosts文件(参照:sublime text3 破解方法,亲测有效) windows系统的hosts文件在C:\Windows\System32\drivers\etc在hosts文件中 ...

  5. numpy.ndarray的赋值操作

    mat=zeros((3,4)) #生成一个3行4列全部元素为0的矩阵 mat[1,:]=111 #从第1行第0列开始,一直到最后一列,赋值为1,效果与mat[1,0:3]相同,前置0可以省略,最后的 ...

  6. 关于graham扫描法求凸包的小记

    1.首先,凸包是啥: 若是在二维平面上,则一般的,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有的点. ───────────────────────────── ...

  7. 2018/03/16 echo、print_r、print、var_dump之间的区别

    还是先说下我对这个方法的理解 print_r()用于 cli模式下的输出调试,error_log() 调试 var_dump() 用于页面的显示调试 echo() 用处比较多,__toString() ...

  8. QtCore是Qt的精髓(包括五大模块:元对象系统,属性系统,对象模型,对象树,信号槽)

    作者:小豆君的干货铺链接:https://www.zhihu.com/question/27040542/answer/218384474来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业 ...

  9. python float()

    1.函数功能将一个数值或者字符转换成浮点型数值 >>> a = 12345 >>> amount = float(a) >>> print(amo ...

  10. 创建list方法总结

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/sheismylife/article/details/28878593 构建一个list 注意要标记 ...