`

物化视图学习(一)

阅读更多

和物化视图相关的一些概念理论:

 

物化视图:就是对已经存储于别处的数据的转换和复制。

 

基础表:物化视图使用到的表被称为基础表。

 

容器表(container table):容器表是一个“普通”表,它与物化视图拥有相同的名称。它被用来存储这个查询语句返回的结果集。

 

查询重写:当查询优化器收到一条待优化的查询,既可以选择直接使用它,也可以使用物化视图来对它进行重写,只要这个物化视图包含执行这条查询需要的全部或部分数据。

 

如果希望提高应用程序的性能,同时不能修改它执行的SQL语句,则可以使用物化视图的查询重写特性,当然,决定使用或不使用物化视图是基于查询优化器对执行计划开销的计算。提示rewrite和no_rewrite可用来影响查询优化器的这个决定。

 

物化视图相关参数:

1.可以指定容器表的相关物理属性,如分区,压缩,表空间以及存储参数。在这方面,容器表与其他表的处理方式是一样的。

2.在创建物化视图时,查询语句会被执行并且它的结果将被存储到容器表中,这是因为参数build immediate(立即构造)是默认的选项。还有另外两个选项:其一为通过制定参数build deferred(延迟构造)来将插入记录的时间延迟到进行第一次刷新操作的时候,其二为通过指定参数on prebuild table(基于预创建表)来使用一个已经存在的表作为容器表。

3.查询重写功能在默认情况下是不启用的。要启用它,必须指定参数enable query rewrite。

4.在默认情况下,为了提高快速刷新(fast refresh)的性能,将会自动为容器表创建一个索引。如果不想创建这个索引,可以指定参数 using no index来实现。

 

查询重写

只要当SELECT子句存在于SQL语句中,查询优化器就可以考虑利用查询重写功能。另外只有在动态初始化参数query_rewrite_enabled必须设置为TRUE和必须在创建物化视图时指定了参数enable query rewrite时,才可以使用查询重写功能。

查询重写包含3种类别:

1.全文匹配的查询重写

2.部分文本匹配的查询重写

3.一般查询重写

 

参数:query_rewrite_integrity

这个参数的设置决定了在包含没有验证的约束或无效数据时,查询优化器可以使用物化视图查询重写。这个参数可以设置以下3值:

enforced---只有物化视图包含的是最新的数据时才能用来做查询重写。另外,只有经过验证的约束才能被一般查询重写所使用。默认值

trusted---只有物化视图包含的是最新的数据时才能用来做查询重写。另外,维度与约束信息在激活未验证并被置为rely的时候可以被一般查询重写所信任。

stale_tolerated----所有存在的物化视图,包含哪些含有实效数据的物化视图,都可以被用来做查询重写。另外,维度与约束信息在激活未验证并被置为rely的时候可以被一般查询重写所信任。

 

如果某个SQL语句没有使用查询重写,而你不理解为什么会这样,就可以使用包dbms_mview里的存储过程explain_rewrite来找到问题所在。分析时需要用到rewrite_table表,假如rewrite_table分析所在的模式中不存在,调用$ORACLE_HOME/rdbms/admin下的脚本utlxrw.sql

 

可以参考user_mviews视图中的rewrite_capability字段,检查物化视图支持哪些查询重写,rewrite_capability有几个不同的值:none,textmatch或general。如果值为gereral,就代表物化视图支持一般查询重写,如果值为textmatch,就很有必要知道至少以下2点:第一:具体支持这两种基于文本匹配的查询重写里面的哪一种?全文匹配或部分文本匹配的查询重写?第二:为什么不支持一般查询重写? 为了支持回答以上问题,可以使用包DBMS_MVIEW里的存储过程explain_mview,需要用到mv_capabilities_table,假如不存在此表,需要执行$ORACLE_HOME/rdbms/admin/utlxmv.sql创建此表,mv_capabilities_table中的字段msgtxt简要地说明为什么不支持特定的查询重写的原因。

 

4.物化视图的刷新

 当表被修改时,依赖于它的物化视图会失效。因此,需要执行一次刷新来保持物化视图的有效性。在创建物化视图的时候,可以指定如何以及何时进行刷新操作。可以有以下4种选择:

 完全刷新(REFERSH COMPLETE):容器表的所有内容都会被删除,并且所有的数据都会从基础表重新加载。只有在相当一部分数据被修改后才去使用这种方式。

快速刷新(REFERSH FAST):容器表中的内容会被重用,只有被修改的数据才会被同步到容器表。如果基础表上只有少量数据被变更,就应该使用这种方法。只有满足多个条件时,才会考虑这种方法,如果其中一个条件不满足,则或REFERSH FAST被拒绝作为物化视图的一个有效参数,或者会抛出一个错误异常。

强制刷新(REFRESH FORCE):最初,会尝试使用快速刷新。如果它无法工作,就执行一次完全刷新。

永不刷新(NEVER REFRESH):物化视图永不刷新。

 

可以通过以下方式来指定物化视图刷新发生的时间点。

根据需要(ON DEMAND)-物化视图会在显式请求的情况下进行刷新

在提交时(ON COMMIT)-物化视图会在基础表修改所在的同一个事物里进行自动刷新。

当选择手工刷新物化视图的时候,可以使用包DBMS_MVIEW中的refresh、refresh_all_mviews、refresh_dependent存储过程。

5基于物化视图日志的快速刷新

物化视图日志是一个数据库引擎自动维护的表,它被用来跟踪基础表上发生的变更。可以在每个基础表上创建一个物化视图日志。

可以查看user_mview_logs视图检查在基础表上创建的物化视图日志。

可以通过DBMS_MVIEW的EXPLAIN_MVIEW过程检查物化视图不能够实现快速刷新的原因,存储过程的输出结果保存在表mv_capabilities_table中。

6包含分区变化跟踪的快速刷新

基于物化视图日志的快速刷新在进行了类似CREATE PARTITION或DROP PARTITION的分区管理操作后无法被执行。为了解决这个问题,包含分区变化跟踪(PCT,partition change tracking)的快速刷新就出现了。思路是,数据库引擎可以在分区级别跟踪数据的失效与否,而不仅仅在表一级进行跟踪。也就是说,它可以跳过所有没有发生变更的分区来执行刷新操作。如果物化视图包含下列信息,就可以做到这一点。

 分区键值

 rowid

 分区标记

 依赖于连接的表达式(仅仅从Oracle 10g开始)

 

7何时使用物化视图

   在逻辑读数量与返回记录数量之间的比率非常高的时候,用来提高大表汇总与(或)连接的性能。

   在全表扫描或索引范围扫描都不能提供有效性能的时候,用来提高单表访问的性能。基本上,它们是具有平均选择性的访问,从而需要使用分区功能,但是无法利用分区功能的话,使用物化视图就比较合适了。

   在OLTP环境下,对于那些查询频繁但更新相对较少的表比较适合使用物化视图。在这种环境下,为了确保物化视图的数据完全有效,通常会使用基于事务提交的快速杀心模式来刷新物化视图。

   物化视图通常在数据仓库环境中来存储汇总结果。因为首先:数据通常是只读的;因此,在数据库只是用于修改表的时候,刷新物化视图的开销可以被降到最小并通过时间窗口被隔离。其次,在这种环境下,提升的空间可能会非常大。

 

分享到:
评论

相关推荐

    oracle物化视图_循序渐进学习笔记

    Oracle物化视图是一种在数据库中预先计算并存储视图查询结果的数据对象,它与普通的视图不同,普通视图在查询时动态地基于基表...学习和掌握物化视图的使用,对于数据库管理员和开发人员来说,是一项非常有价值的技术。

    Oracle物化视图创建和使用

    在学习 Oracle 物化视图时,需要了解物化视图的概念、创建和删除物化视图、设置自动刷新时间和日志等知识点。同时,也需要了解物化视图的优点和缺点,以便更好地使用物化视图提高查询性能。 Oracle 物化视图的优点...

    Oracle物化视图使用[文].pdf

    Oracle物化视图是数据库管理系统中的一个重要特性,尤其在处理大量数据和复杂查询的场景下,它可以极大地提升查询性能和数据一致性。物化视图与普通的视图不同,后者是逻辑上的虚表,其内容在查询时动态计算,而物化...

    ORACLE使用物化视图和查询重写功能

    通过本教程的学习,我们不仅掌握了物化视图和查询重写的基本原理及其在Oracle数据库中的实现方法,而且还深入了解了如何通过一系列的具体操作来优化数据仓库系统的查询性能。这些技术的应用可以显著提高大型数据仓库...

    数据仓库,数据挖掘,物化视图

    数据仓库、数据挖掘和物化视图是三个关键...总之,数据仓库、数据挖掘和物化视图是构建现代企业信息系统的基石,它们共同为企业提供了一个强大、可靠且灵活的数据管理和分析平台,助力企业更好地理解和利用其数据资产。

    OCM考试实验笔记之一_物化视图.pdf

    7. ITPUX技术网提供了更多关于Oracle OCM考试和物化视图的文档资源,以及相关的技术交流群,供学习者进行深入讨论和交流。 总之,物化视图在优化复杂查询和提高数据仓库性能方面扮演着重要角色。理解其创建、刷新...

    学习分区表,索引,物化视图的使用

    ### 学习分区表、索引、物化视图的使用 #### ORACLE分区表分类及应用场景 在Oracle数据库中,分区技术是一项重要的优化手段,主要用于处理大型表以提高查询性能和管理效率。分区表根据数据分布的不同特性分为几种...

    Oracle物化视图整理

    Oracle物化视图整理,包含所有资料,值得学习

    基于ORACLE物化视图的电力营销系统优化.pdf

    【标题】中的“基于ORACLE物化视图的电力营销系统...总的来说,本文通过实际案例探讨了ORACLE数据库在电力营销系统中的优化策略,尤其是物化视图的应用,对于数据库管理员和电力行业相关人员具有很高的学习和参考价值。

    sql学习 执行计划利用设计特性改变之4_物化视图影响.sql

    sql学习 执行计划利用设计特性改变之4_物化视图影响.sql

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

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

    oracle入门很简单—视图

    Oracle数据库系统是世界...而Oracle提供的不同类型的视图,如关系视图、内嵌视图、对象视图和物化视图,为不同的应用场景提供了丰富的选择。在实践中,根据实际情况灵活运用这些视图,将极大地提升你的数据库管理能力。

    自己总结的数据库oracle视图用法

    在Oracle中,还可以创建物化视图,这种视图会预先计算并存储结果,适用于需要定期更新且查询频繁的数据。物化视图的刷新可以是手动的,也可以设置为自动定时刷新,以保持数据的实时性。 总的来说,Oracle视图是...

    oracle动态视图文档(详细版)

    7. **优化动态视图**:分析视图查询性能问题,提供索引策略、物化视图和查询重构等优化技巧。 8. **异常处理与错误调试**:介绍处理视图操作过程中可能出现的错误,以及如何进行有效的调试。 9. **实战案例**:...

    CDC发布者改变表配置脚本--20140718.sql

    物化视图学习

    MySQL数据库应用案例视频教程下载第11讲 视图.zip

    此外,你还将学习到视图与物化视图的区别。物化视图是预先计算并存储结果的视图,这在需要频繁查询相同结果集且计算成本较高的情况下非常有用。不过,物化视图需要更多的存储空间,并且需要定期维护以保持与基础表的...

    数据库开发 Oracle数据库 SQL开发教程 第15章 视图(共23页).pdf

    视图也可以是可更新的、只读的,或者是物化视图,物化视图会预先计算并存储结果,提高查询效率。 在实际应用中,视图经常与其他数据库对象结合使用,如表、约束、序列、索引和同义词。表是存储数据的基本单位,约束...

    2012-02-24我写的视图(附数据库设计)

    6. **提高性能**:在某些情况下,查询视图可能比直接查询基础表更快,因为数据库系统可能能够优化视图的执行计划,尤其是在使用物化视图时,会预先计算并存储结果,从而加快查询速度。 在2012-02-24我写的视图这个...

Global site tag (gtag.js) - Google Analytics