`

oracle 物化视图

阅读更多

  优势

     可以提高性能:

        通过预先计算好答案存储起来,可以大大地减少机器的负载。
     特点如下:
      更少的物理读--扫描更少的数据
      更少的写--不用经常排序和聚集
      减少CPU的消耗--不用对数据进行聚集计算和函数调用
      显著地加快响应时间--在使用物化视图查询数据时(与主表相反),将会很快的返回查询结果

  缺点

 物化视图会增加对磁盘资源的需求,即需要永久分配的硬盘空间给物化视图来存储数据。
 物化视图用于只读或者“精读”环境下工作最好 ,不用于联机事务处理系统(OLTP)环境

 

物化视图的设置
 系统级:通过INIT.ORA
 会话级:通过alter session命令
 设置参数如下:
 query_rewrite_enabled--此参数设置为true,则表示会发生查询重写;当为false,则不会发生查询重写;


 query_rewrite_integrity--此参数是控制oracle如何重写查询,且可能设置为下面的三种值:


   enforced--仅仅使那些由oracle强迫和保证的约束以及规则的查询可以重写;
                   但由于oralce不强加一些可以通过oralce知道其他的推论关系的查询的关系;


   trusted--使用oralce强加的约束,以及任意关系存在于数据中的而非数据库强加的关系可以重写查询;


   stale_tolerated--使用物化视图可以重写查询,即使oralce知道包含的数据是陈旧的。

 

  query_rewrite_enabled=false,

  oracle对SQL语句进行分析与优化;
  query_rewrite_enabled=true,

 oracle通过起用查询重写功能,在分析过SQL语句之后,oracle将多一个步骤重写此查询以访问某些物化视图,而不是它  所参照的真正的表。

    如果能够执行查询重写,这些重写的查询就被分析,并与初始查询一起优化,从数据字典所发现的可利用的物化视图的集合中执行成本最低的查询方案,这样的查询成本最低;
   如果不能重写此查询,就对原始分析的查询进行优化,并正常运行;

 

 

1、查询重写的步骤:
  完全精确的正文匹配->部分正文匹配->一般查询重写方法(要求数据充足并且连接兼容)->分组兼容性->聚集兼容性

2、如何确保物化视图可以使用?
  这里只讲三种方法来帮助使用物化视图的查询重写功能:
  1)约束;
  2)维数;
  3)描述复杂关系-数据层次结构;


下面是对上面三种方法举例说明:
1)约束:
SQL> create table emp as select * from scott.emp;


SQL> create table dept as select * from scott.dept;

SQL>grant query rewrite to  demo;

SQL> alter session set query_rewrite_enabled=true;

SQL> alter session set query_rewrite_integrity=enforced;

 

SQL> create materialized view emp_dept
  2  build immediate
  3  refresh on demand
  4  enable query rewrite as
  5  select dept.deptno,dept.dname,count(*)
  6  from emp,dept
  7  where emp.deptno = dept.deptno
  8  group by dept.deptno,dept.dname;

 

 

SQL> alter table dept add
  2  constraint dept_pk primary key(deptno);

 

 

SQL> alter table emp
  2  add constraint emp_fk_dept
  3  foreign key(deptno) references dept(deptno);

 

 

 

 

SQL>table emp drop constraint emp_fk_dept;

 

SQL> alter table dept drop constraint dept_pk;

 

SQL> alter table emp modify deptno null;

下面是装入数据过程,假设装入了一条数据:

SQL> insert into emp (empno,deptno) values ( 2, 2);

SQL> commit;
下面是告诉oracle刷新物化视图:
SQL> exec dbms_mview.refresh( ''EMP_DEPT'' );

 

这个时候告诉oracle有关emp和dept表之间的关系:
SQL> alter table dept
  2   add constraint dept_pk primary key(deptno)

 3  rely enable NOVALIDATE ;

 

SQL> alter table emp
2 add constraint emp_fk_dept
3 foreign key(deptno) references dept(deptno)
4  rely enable NOVALIDATE           ;

 

SQL> alter table emp modify deptno not null NOVALIDATE;

 

上面的语句中有rely enable NOVALIDATE以及NOVALIDATE表示告诉oracle不必不再对装入的已有数据的检查,并且rely告诉oracle要相信
数据的完整性,即告知oracle相信如果将emp和dept表连起来, 将检索emp表的每一行。
事实上对oracle说的并不是事实,有一条新插入emp的数据在dept中并没有对应的行,违反了数据的完整性。
如果设置alter session set query_rewrite_integrity=enforced;
则下面:
SQL> alter session set query_rewrite_integrity=enforced;


SQL> select count(*) from emp;

  COUNT(*)
----------
        15

Elapsed: 00:00:00.40

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=2 Card=1)
   1    0   SORT (AGGREGATE)
   2    1     TABLE ACCESS (FULL) OF ''EMP'' (Cost=2 Card=654)

Statistics
----------------------------------------------------------
        288  recursive calls
         38  db block gets
         77  consistent gets
          0  physical reads
       6752  redo size
        379  bytes sent via SQL*Net to client
        503  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          9  sorts (memory)
          0  sorts (disk)
          1  rows processed

分析:当query_rewrite_integrity=enforced时,只有使那些由oracle强迫
      和保证的约束以及规则的查询才可以重写 ,上面尽管建了约束,但是这个约束并没有
      核实,而且并没有被数据库自己所确认,所以该语句并没有查询重写rely enable NOVALIDATE以及NOVALIDATE
      表示告诉oracle不必不再对装入的已有数据的检查,实质就是数据库自己并没有确认,所以并不是
      由oracle强迫和保证的约束以及规则的查询
      
      
SQL> alter session set query_rewrite_integrity=trusted;

 

SQL> select count(*) from emp;

  COUNT(*)
----------
        14

Elapsed: 00:00:00.30

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=2 Card=1 Bytes=13)
   1    0   SORT (AGGREGATE)
   2    1     TABLE ACCESS (FULL) OF ''EMP_DEPT'' (Cost=2 Card=82 Bytes=
          1066)

Statistics
----------------------------------------------------------
         20  recursive calls
          1  db block gets
         17  consistent gets
          1  physical reads
        100  redo size
        379  bytes sent via SQL*Net to client
        503  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
          1  rows processed
         
设置了query_rewrite_integrity=trusted,告诉oracle使用oralce强加的约束,
以及任意关系存在于数据中的而非数据库强加的关系可以重写查询,设置过后数据库
认为数据中有非数据库强加的emp和dept表之间的关系存在,则数据库认为可以采用
查询重写,使用物化视图。此时oracle对新插入的数据认为是违反了的emp和dept表之间
约束的关系,所以并没有对新插入的行的做记数,及时物化视图做刷新,也没有将新插入
的数据加到物化视图中去,oracle认识到我们告诉他的数据不可靠, 可以知道:
1、对于大型数据仓库可以非常相信物化视图,不必自己再做的量数据的校验;
2、如果你要你想要的数据,必须自己一确保数据的可靠,100%的净化了数据;

 

分享到:
评论

相关推荐

    Oracle物化视图应用详解

    Oracle物化视图是一种数据库对象,它存储了查询结果,以提供快速的数据访问,特别适合于需要频繁查询但计算过程复杂或涉及大量数据连接的场景。物化视图的使用可以显著提高查询性能,因为它避免了每次查询时的计算...

    Oracle物化视图创建和使用

    Oracle 物化视图创建和使用 Oracle 物化视图是一种预先计算并保存表连接或聚集等耗时较多的操作的结果,以提高查询性能。物化视图对应用程序透明,不会影响应用程序的正确性和有效性,但需要占用存储空间。基表发生...

    Oracle物化视图增量刷新的应用研究.pdf

    "Oracle 物化视图增量刷新的应用研究" Oracle 物化视图是 Oracle 公司提供的一种新技术,可以解决很多普通逻辑视图无法完成的功能。物化视图操作简单,支持增量刷新及全量刷新,可以支持复杂的表连接、聚合函数等...

    利用ORACLE物化视图建立报表数据库.pdf

    "利用ORACLE物化视图建立报表数据库.pdf" 本文主要介绍了利用ORACLE物化视图建立报表数据库的方法和原理。报表数据库是指独立于生产数据库的数据库,用于存储和管理报表数据。通过建立报表数据库,可以实现工作负荷...

    oracle 物化视图详解(内含例子)

    ### Oracle 物化视图详解 #### 一、物化视图的概念与作用 物化视图是Oracle数据库中一种特殊的数据对象,它保存的是基于一个或多个表(称为基表)的查询结果集,并且这些结果集是物理上存在的。与普通的视图不同,...

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

    Oracle物化视图是一种在数据库中预先计算并存储视图查询结果的数据对象,它与普通的视图不同,普通视图在查询时动态地基于基表数据生成结果,而物化视图则拥有自己的物理存储,提供了对数据的快速访问。在本篇循序渐...

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

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

    SQL 优化之 oracle物化视图

    Oracle 物化视图 Oracle 物化视图是数据库对象,存储远程表的数据副本,也可以称为快照。物化视图可以查询表、视图和其他物化视图。通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。 创建...

    Oracle物化视图介绍

    ### Oracle物化视图介绍及应用详解 #### 一、物化视图概念与作用 在Oracle数据库中,物化视图(Materialized View, MV)是一种预计算并存储的查询结果,它能够显著提高复杂查询的性能。通常情况下,复杂的查询涉及到...

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

    Oracle数据库中的物化视图(Materialized View,简称MV)是一种强大的优化工具,它通过预先计算并存储查询结果,提供了一种快速访问复杂查询数据的方式。这种技术在数据仓库环境中尤其有用,因为数据仓库通常涉及...

    基于Oracle物化视图日志的数据同步技术研究.pdf

    Oracle物化视图日志是一种强大的数据同步技术,尤其适用于分布式数据库和分布式应用系统之间的数据一致性维护。在当今信息化系统中,随着技术的快速发展,数据的分布性和实时性需求日益增强,数据同步成为了一个关键...

    oracle物化视图

    【Oracle物化视图】是Oracle数据库中一种特殊的数据对象,它存储了查询结果集的物理副本,可以提供对远程数据的快速访问和一致性保证。物化视图的主要优点在于,它可以减少对远程数据源的访问,提高数据的本地可用性...

    ORACLE 物化视图 详解

    ### ORACLE 物化视图详解 #### 一、物化视图概述 在Oracle数据库中,物化视图(Materialized View)是一种特殊的数据库对象,它存储的是一个查询的结果集,可以理解为一个预计算的快照。物化视图主要用于提高报表...

    oracle物化视图资料

    ### Oracle物化视图详解 #### 一、物化视图概述 Oracle物化视图是一种特殊类型的数据库对象,其核心功能在于预先计算并存储基于一个或多个表的查询结果,以此来加速后续的查询操作。与普通视图不同,普通视图在...

    oracle物化视图配置指导书.doc

    Oracle物化视图是Oracle数据库中一种非常重要的特性,它提供了数据的一致性视图,通常用于实现数据的异步复制。本配置指导书主要针对Oracle高级复制中的物化视图,旨在帮助用户理解并成功配置物化视图,以满足在实际...

    ORACLE物化视图

    ### ORACLE物化视图详解 #### 执行概要与简介 在当今的数据密集型世界中,无论是数据仓库、数据中心还是在线事务处理(OLTP)系统,都面临着一个共同的挑战:如何高效地检索和展示庞大的信息量。Oracle物化视图作为...

    基于Oracle物化视图的查询性能优化.pdf

    Oracle物化视图是数据库性能优化的重要工具,尤其在处理大量数据查询和统计工作中显得尤为重要。物化视图,也称作快照,是数据库在某一时间点对目标表(主控)的副本,可以是主站点上的主表,也可以是物化视图站点上...

    ORACLE物化视图的技术应用.pdf

    Oracle物化视图是一种在数据库管理系统中用于提升性能和数据整合的重要工具,尤其适用于处理大量数据和复杂的查询。物化视图本质上是一个预先计算并存储的查询结果集,它不仅提供了一种数据缓存的方式,还可以实现...

    使用Oracle物化视图实现数据同步复制的研究与实现.pdf

    【Oracle物化视图实现数据同步复制】 Oracle物化视图是一种高级的数据管理工具,用于在数据库间实现数据的同步复制。物化视图的概念首次出现在Oracle8i中,它是一个实际存储在数据库中的预计算结果集,可以提高查询...

Global site tag (gtag.js) - Google Analytics