`

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;

 

分享到:
评论

相关推荐

    materialized_view基础知识

    物化视图(Materialized View)是数据库管理系统中一种特殊的数据对象,它预先计算并存储了一个查询的结果,以便后续的查询能快速访问这些结果。物化视图的主要用途包括提高查询性能、实现数据的局部复制以及支持...

    PostgreSQL物化视图(materialized view)过程解析

    这篇文章主要介绍了PostgreSQL物化视图(materialized view)过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1、创建视图 CREATE MATERIALIZED VIEW ...

    视图上触发器 & Materialized View 物化视图

    本文将详细探讨"视图上触发器"以及"Materialized View(物化视图)",并结合提供的SQL脚本文件进行分析。 首先,视图是数据库中的一个虚拟表,它是由SQL查询语句定义的,不存储实际数据,而是根据其定义在运行时...

    oracle materialized view

    CREATE MATERIALIZED VIEW mv_emp_pk REFRESH FAST START WITH SYSDATE NEXT SYSDATE + 1/48 WITH PRIMARY KEY AS SELECT * FROM emp@remote_db; ``` 2. ROWID物化视图:这类物化视图基于ROWID,适用于需要...

    MariaDB-Materialized-View

    材质化视图(Materialized View)是MariaDB中的一个重要特性,它提供了一种数据抽象和优化查询的方式。在此,我们将深入探讨MariaDB中材质化视图的概念、用途以及创建和管理的方法。 材质化视图不同于普通的数据库...

    tune materialized view

    dbms_advisor.tune_mview使用的例子

    数据库中的物化视图的使用保姆级

    CREATE MATERIALIZED VIEW [view_name] AS {query_block}; ``` 例如,创建一个全量物化视图,统计表 t1 中的记录数: ``` CREATE MATERIALIZED VIEW mv AS select count(*) from t1; ``` 查询全量物化视图的结果: `...

    Oracle物化视图创建和使用

    CREATE MATERIALIZED VIEW MV_VIEW AS SELECT * FROM ... ``` 删除物化视图可以使用 DROP MATERIALIZED VIEW 语句,例如: ```sql DROP MATERIALIZED VIEW MV_VIEW ``` 物化视图可以设置自动刷新时间,例如: ```...

    oracle view

    CREATE MATERIALIZED VIEW mv_emp_pk REFRESH FAST START WITH SYSDATE NEXT SYSDATE + 1/48 WITH PRIMARY KEY AS SELECT * FROM emp@remote_db; ``` 这里使用了`REFRESH FAST`选项,意味着需要为源表创建物化视图...

    ORACLE 物化视图 详解

    在Oracle数据库中,物化视图(Materialized View)是一种特殊的数据库对象,它存储的是一个查询的结果集,可以理解为一个预计算的快照。物化视图主要用于提高报表查询性能和实现数据复制等功能。 物化视图的特性...

    Python-PostgresMaterialized视图依赖管理器

    1. **跟踪依赖关系**:它能够识别和记录每个Materialized View对其它表或视图的依赖,确保当依赖发生变化时能及时作出响应。 2. **自动刷新**:在数据更新后,管理器可以自动或按需刷新Materialized View,以保持其...

    Oracle数据库集中复制方法浅议

    4. 实体化视图复制(Materialized View Replication):一个主站点提供数据,一个实体化视图站点进行数据拷贝。 5. 实体化视图(Materialized View):在目标站点创建的表,存储主站点数据的副本。 6. 快速刷新、...

    oracle数据快照

    REFRESH MATERIALIZED VIEW materialized_view_name; ``` 通过此命令可以手动刷新特定的物化视图,确保其数据是最新的。 #### 五、总结 综上所述,Oracle 数据快照(通过物化视图日志实现)是一种非常实用的...

    Oracle中管理物化视图变得更加容易

    在Oracle数据库中,物化视图(Materialized View, MV)是一种重要的性能优化工具,尤其在数据仓库和决策支持系统中。物化视图预先计算并存储了一个查询的结果,允许快速访问而不是每次需要时重新执行复杂的查询。在...

    Oracle9i集中数据复制.pdf

    4. 实体化视图复制(Materialized View Replication):一个主站点提供源数据,一个实体化视图站点接收和更新数据。 5. 实体化视图(Materialized View):在目标站点上创建的与源表或视图对应的表,用于存储复制...

    Oracle数据库集中复制方法逐步精细

    4. 实体化视图复制(Materialized View Replication):一个主站点提供数据,一个实体化视图站点接收并存储数据。 5. 实体化视图(Materialized View):在实体化视图站点上创建的表,用于存储主站点数据的副本。 6....

    oracle 通过快照进行数据恢复

    这里需要注意的是,在创建快照之前,必须先为表创建一个“MATERIALIZED VIEW LOG”。 ##### 3.2 使用快闪查询恢复数据 当数据发生误删除后,可以使用以下命令来查看某个时间点的数据: ```sql SELECT * FROM ...

    1-5+Doris物化视图、索引的典型应用案例.pdf

    CREATE MATERIALIZED VIEW [MV name] as [query] [PROPERTIES ("key" = "value")] SELECT select_expr[, select_expr ...] FROM [Base view name] GROUP BY column_name[, column_name ...] ORDER BY column_name[, ...

    Oracle数据库中物化视图的原理剖析.pdf

    Oracle数据库中的物化视图(Materialized View, MV)是一种数据对象,它预先计算并存储了一个查询的结果,以便后续查询可以更快地访问这些数据,而无需每次请求时都执行原始查询。物化视图在数据仓库和数据分析场景...

Global site tag (gtag.js) - Google Analytics