精华内容
下载资源
问答
  • 1.普通视图和物化视图的区别 1)普通视图:普通视图是从一个或者多个表中按照约束条件导出数据而生成的虚拟表,其本质就是一个一段SQL查询语句,没有数据存储能力。 2)物化视图:物化视图是从一个或者多个表中按照...

    1.普通视图和物化视图的区别

    1)普通视图:普通视图是从一个或者多个表中按照约束条件导出数据而生成的虚拟表,其本质就是一个一段SQL查询语句,没有数据存储能力。

    2)物化视图:物化视图是从一个或者多个表中按照约束条件导出的物理表,其本质更像一个数据备份表,有数据存储能力。

    2.普通视图的基本操作

    1)创建视图

    CREATE OR REPLACE VIEW vw_test AS
    SELECT 
    		tab1.a, tab2.b, tab3.c
    FROM
    		 table1 tab1,
    		 table2 tab2,
    		 table3 tab3
    WHERE
    		tab1.x =tab2,x
    		tab2,y=tab3.y;
    
    1. 删除视图
    DROP VIEW  vw_test ;
    
    1. 数据查询
    SELECT
    	  a, b, c  
    FROM  
    	vw_test;
    

    3.物化视图的认识

    1)物化视图的类型
    (1)ON DEMAND
    (2)ON COMMIT

    2.ON DEMAND和ON COMMIT 的区别(刷新方式不同)
    (1)ON DEMAND的刷新方式:用户需要的时候进行刷新,可以手动通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过跑JOB程序设定定时任务进行刷新,总之基表更新了的时候不会立刻刷新,需要通过某些操作来被动刷新。

    (2)ON COMMIT 的刷新方式:当基表的数据有变更的时候,该物化视图也立刻刷新,从而和基表保持一致。

    3.ON DEMAND物化视图
    默认情况下,如果没指定刷新方法和刷新模式,则Oracle默认为FORCE和DEMAND。
    物化视图的数据怎么随着基表而更新?
    Oracle提供了两种方式,手工刷新和自动刷新,默认为手工刷新。
    (1) 手工刷新:通过我们手工的执行某个Oracle提供的系统级存储过程或包,来保证物化视图与基表数据一致性。这是最基本的刷新办法了。
    (2) 自动刷新:其实也就是Oracle会建立一个job,通过这个job来调用相同的存储过程或包,加以实现。
    (3)创建定时刷新的物化视图:
    指定刷新时间(比如每天早上8:00定时刷新一次):

      CREATE MATERIALIZED VIEW mv_name
             REFRESH FORCE ON DEMAND 
             START WITH sysdate 
             NEXT TO_DATE(TO_CHAR(SYSDATE+1,
             							'YYYYMMDD')||' 08:00:00',
             							'YYYYMMDD hh24:mi:ss')
    

    4.ON COMMIT物化视图
    ON COMMIT物化视图的创建,和上面创建ON DEMAND的物化视图区别不大。
    因为ON DEMAND是默认的,所以ON COMMIT物化视图,需要再增加个参数即可。
    需要注意的是,无法在定义时仅指定ON COMMIT,还得附带个参数才行。
    创建ON COMMIT物化视图:

    CREATE MATERIALIZED VIEW mv_name 
    				REFRESH FORCE ON COMMIT
     				AS
     				SELECT
        						*
     				FROM 
     							table_name 
    

    备注:实际创建过程中,基表需要有主键约束,否则会报错(ORA-12014)

    5.物化视图的刷新

    (1)刷新的模式有两种:ON DEMAND和ON COMMIT。
    (2)刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。
    ① FAST方式:采用增量刷新,只刷新自上次刷新以后进行的修改。
    ② COMPLETE方式:对整个物化视图进行完全的刷新。
    ③ FORCE方式:如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。
    ④NEVER方式:指物化视图不进行任何刷新。

    对于已经创建好的物化视图,可以修改其刷新方式。
    具体修改语句:

    ALTER MATERIALIZED VIEW mv_name 
    REFRESH (FAST / COMPLETE / FORCE) ON DEMAND 
    START WITH sysdate NEXT ..........
    

    6、物化视图的删除:

    MATERIALIZED VIEW mv_name
    
    展开全文
  • 普通视图和物化视图的区别(转) 本文转自http://www.cnblogs.com/xuezhen-huang/p/4651118.html 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。 普通视图是虚拟表,应用的局限性...

    普通视图和物化视图的区别(转)

    本文转自http://www.cnblogs.com/xuezhen-huang/p/4651118.html

    物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。
    普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。


    1、物化视图的类型:

    ON DEMAND、ON COMMIT 二者的区别在于刷新方法的不同
    ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;
    而ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。

    2、ON DEMAND物化视图
    物化视图的创建本身是很复杂和需要优化参数设置的,特别是针对大型生产数据库系统而言。
    但Oracle允许以这种最简单的,类似于普通视图的方式来做,所以不可避免的会涉及到默认值问题。
    也就是说Oracle给物化视图的重要定义参数的默认值处理是我们需要特别注意的。

    物化视图的特点:
    (1) 物化视图在某种意义上说就是一个物理表(而且不仅仅是一个物理表),这通过其可以被user_tables查询出来,而得到佐证;
    (2) 物化视图也是一种段(segment),所以其有自己的物理存储属性;
    (3) 物化视图会占用数据库磁盘空间,这点从user_segment的查询结果,可以得到佐证;
    创建语句:create materialized view mv_name as select * from table_name
    默认情况下,如果没指定刷新方法和刷新模式,则Oracle默认为FORCE和DEMAND。


    物化视图的数据怎么随着基表而更新?
    Oracle提供了两种方式,手工刷新和自动刷新,默认为手工刷新。也就是说,通过我们手工的执行某个Oracle提供的系统级存储过程或包,来保证物化视图与基表数据一致性。这是最基本的刷新办法了。

    自动刷新,其实也就是Oracle会建立一个job,通过这个job来调用相同的存储过程或包,加以实现。
    ON DEMAND物化视图的特性及其和ON COMMIT物化视图的区别,即前者不刷新(手工或自动)就不更新物化视图,而后者不刷新也会更新物化视图,——只要基表发生了COMMIT。
    创建定时刷新的物化视图:
    create materialized view mv_name refresh force on demand start with sysdate next sysdate+1 (指定物化视图每天刷新一次) 上述创建的物化视图每天刷新,但是没有指定刷新时间,如果要指定刷新时间(比如每天晚上10:00定时刷新一次):
    create materialized view mv_name refresh force on demand start with sysdate next to_date( concat( to_char( sysdate+1,'dd-mm-yyyy'),' 22:00:00'),'dd-mm-yyyy hh24:mi:ss')


    3、ON COMMIT物化视图
    ON COMMIT物化视图的创建,和上面创建ON DEMAND的物化视图区别不大。因为ON DEMAND是默认的,所以ON COMMIT物化视图,需要再增加个参数即可。
    需要注意的是,无法在定义时仅指定ON COMMIT,还得附带个参数才行。
    创建ON COMMIT物化视图:create materialized view mv_name refresh force on commit as select * from table_name
    备注:实际创建过程中,基表需要有主键约束,否则会报错(ORA-12014)

     

    4、物化视图的刷新
    刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。
    刷新的模式有两种:ON DEMAND和ON COMMIT。(如上所述)
    刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。
    FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。
    COMPLETE刷新对整个物化视图进行完全的刷新。
    如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。
    NEVER指物化视图不进行任何刷新。
    对于已经创建好的物化视图,可以修改其刷新方式,比如把物化视图mv_name的刷新方式修改为每天晚上10点刷新一次:
    alter materialized view mv_name refresh force on demand start with sysdate next to_date(concat(to_char(sysdate+1,'dd-mm-yyyy'),' 22:00:00'),'dd-mm-yyyy hh24:mi:ss')

     

    5、物化视图具有表一样的特征

    所以可以像对表一样,我们可以为它创建索引,创建方法和对表一样。

    6、物化视图的删除:
    虽然物化视图是和表一起管理的,但是在经常使用的PLSQL工具中,并不能用删除表的方式来删除
    (在表上右键选择‘drop’并不能删除物化视图),可以使用语句来实现:drop materialized view mv_name

     

    普通视图和物化视图的区别
    普通视图和物化视图根本就不是一个东西,说区别都是硬拼到一起的,
    首先明白基本概念,普通视图是不存储任何数据的,他只有定义,在查询中是转换为对应的定义SQL去查询,
    而物化视图是将数据转换为一个表,实际存储着数据,这样查询数据,就不用关联一大堆表,如果表很大的话,会在临时表空间内做大量的操作。

    普通视图的三个特征:
    1、是简化设计,清晰编码的东西,他并不是提高性能的,他的存在只会降低性能
    (如一个视图7个表关联,另一个视图8个表,程序员不知道,觉得很方便,把两个视图关联再做一个视图,那就惨了),他的存在未了在设计上的方便性

    2、其次,是安全,在授权给其他用户或者查看角度,多个表关联只允许查看,不允许修改,
    单表也可以同WITH READ ONLY来控制,当然有些项目基于视图做面向对象的开发,即在视图上去做INSTAND OF触发器,就我个人而言是不站同的,虽然开发上方便,但是未必是好事。

    3、从不同的角度看不同的维度,视图可以划分维度和权限,并使多个维度的综合,也就是你要什么就可以从不同的角度看,而表是一个实体的而已,
    一般维度较少(如:人员表和身份表关联,从人员表可以查看人员的维度统计,从身份看,可以看不同种类的身份有那些人或者多少人),
    其次另一个如系统视图USER_TABLE、TAB、USER_OBJECTS这些视图,不同的用户下看到的肯定是不一样的,看的是自己的东西。
    物化视图呢,用于OLAP系统中,当然部分OLTP系统的小部分功能未了提高性能会借鉴一点点,因为表关联的开销很大,所以在开发中很多人就像把这个代价交给定期转存来完成,
    ORACLE当然也提供了这个功能,就是将视图(或者一个大SQL)的信息转换为物理数据存储,然后提供不同的策略:
    定时刷还是及时刷、增量刷还是全局刷等等可以根据实际情况进行选择,总之你差的是表,不是视图。


    关于在刷新和索引上的区别
    他们两个没有联系吧,刷新我不清楚你是否指的是物化视图的刷新,因为刷新的概念很泛,你说到这里我就理解为物化视图的刷新了,
    上面也已经说了,这是一种策略和方法,其实它是通过对视图关联表上创建相应的LOG,根据日志信息的SQL同步到物化视图中的,
    一般来说:定时的一般是全局刷,及时的一般是局部刷。

    而索引这个说起来就多了,可以说索引专门是一门课程,大概点来说,索引一般有普通索引、位图索引、唯一性索引(还有全文索引啥的,一般不用),
    其实仔细研究会发现无论是那一种索引都是B+树为基础,并起存放方式和表一样,是以段为单位,只是内部有树关系而已。

    1、普通索引是根据B+树找到第一个(索引时有序的),然后以当前为基准,向后顺序找到不符合条件的健值为止。
    2、位图是在叶子节点上根据位图种类对叶子节点的值进行01编码存放(如该字段有1、2、3三种值,就会在叶子节点上有三个位图,
    每个位图根据健值和ROWID顺序存放是否为1、是否为2、是否为3,所以在RBO下统计很快,CBO下一般会认为是普通索引)。

    3、也是按照B+树找,只是找到就不再做任何操作,因为是唯一的。
    因为B+查找是一个类似表的查询,而且获取到ROWID后还是要回表查询的,所以这个过程的开销要和全表扫描计算那个结果更加快,ORACLE才会选择是走索引还是走全表扫描,
    当然对于CBO和RBO选择的方式不一样,具体又是很多,CBO要依赖于表的统计信息,RBO是依赖于尝试。

    展开全文
  • 普通视图和物化视图的区别8.普通视图的三个特征:9. 关于在刷新和索引上的区别 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询...

    物化视图(material view)是什么?

    物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表
    物化视图存储基于远程表的数据,也可以称为快照(类似于MSSQL Server中的snapshot,静态快照)。对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。
    如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。
    对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。(这个是基于本地的基表或者视图的聚合)。
    物化视图,说白了,就是物理表,只不过这张表通过oracle的内部机制可以定期更新,将一些大的耗时的表连接用物化视图实现,会提高查询的效率。当然要打开查询重写选项

    简而言之,就ewrite) .查询重写能够在某些时候提高你的查询速度。
    所谓查询重写,简而言之,就是oracle 的查询优化器发现有个物化视图的语法和你的SQL差不多,那么就会直接访问物化视图,而不是你原来查询中有关的源表

    物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。普通视图方便了开发人员,其实对于性能并没有什么好处,物化视图视图则弥补了数据库的性能。

    1、物化视图的类型

    • 包含聚集的物化视图;

    • 只包含连接的物化视图;

    • 嵌套物化视图。
      三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。创建物化视图时可以指定多种选项,下面对几种主要的选择进行简单说明:

    • 创建方式(BuildMethods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。
      BUILD IMMEDIATE是在创建物化视图的时候就生成数据。
      BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE。

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

    • 刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:ON DEMAND和ON COMMIT。ON DEMAND和ON COMMIT物化视图的区别在于其刷新方法的不同,ON DEMAND指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新,即更新物化视图,以保证和基表数据的一致性;而ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。对基表,平常的COMMIT在0.01秒内可以完成,但在有了ON COMMIT视图后,居然要6秒。速度减低了很多倍。ON COMMIT视图对基表的影响可见一斑。

    包括ON DEMAND、ON COMMIT 两种,二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;而ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。

    2、ON DEMAND物化视图

    物化视图的创建本身是很复杂和需要优化参数设置的,特别是针对大型生产数据库系统而言。但Oracle允许以这种最简单的,类似于普通视图的方式来做,所以不可避免的会涉及到默认值问题。也就是说Oracle给物化视图的重要定义参数的默认值处理是我们需要特别注意的。

    3、物化视图的特点?

    (1) 物化视图在某种意义上说就是一个物理表(而且不仅仅是一个物理表),这通过其可以被user_tables查询出来,而得到佐证;
    (2) 物化视图也是一种段(segment),所以其有自己的物理存储属性;
    (3)物化视图会占用数据库磁盘空间,这点从user_segment的查询结果,可以得到佐证;

    创建语句create materialized view mv_name as select * from table_name 默认情况下,如果没指定刷新方法和刷新模式,则Oracle默认为FORCE和DEMAND。

    4、物化视图的数据怎么随着基表而更新?

    Oracle提供了两种方式,手工刷新和自动刷新,默认为手工刷新。也就是说,通过我们手工的执行某个Oracle提供的系统级存储过程或包,来保证物化视图与基表数据一致性。这是最基本的刷新办法了。自动刷新,其实也就是Oracle会建立一个job,通过这个job来调用相同的存储过程或包,加以实现。

    5、ON DEMAND物化视图的特性及其和ON COMMIT物化视图的区别?

    前者不刷新(手工或自动)就不更新物化视图,而后者不刷新也会更新物化视图,——只要基表发生了COMMIT。
    创建定时刷新的物化视图:create materialized view mv_narefresh force on demand start with sysdate next sysdate+1 (指定物化视图每天刷新一次)
    上述创建的物化视图每天刷新,但是没有指定刷新时间,如果要指定刷新时间(比如每天晚上10:00定时刷新一次):
    CREATE materialized VIEW mv_name refresh FORCE ON demand START WITH sysdate next to_date ( concat(to_char (sysdate + 1, 'dd-mm-yyyy'),'22:00:00'),'dd-mm-yyyy hh24:mi:ss')

    6、ON COMMIT物化视图

    ON COMMIT物化视图的创建,和上面创建ON DEMAND的物化视图区别不大。因为ON DEMAND是默认的,所以ON COMMIT物化视图,需要再增加个参数即可。

    需要注意的是,无法在定义时仅指定ON COMMIT,还得附带个参数才行。
    创建ON COMMIT物化视图:create materialized view mv_name refresh force on commit as select * from table_name
    备注:实际创建过程中,基表需要有主键约束,否则会报错(ORA-12014)

    7、物化视图的刷新

    刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。
    刷新的模式有两种:ON DEMAND和ON COMMIT。(如上所述)
    刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER
    。FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。COMPLETE刷新对整个物化视图进行完全的刷新。如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。NEVER指物化视图不进行任何刷新。 对于已经创建好的物化视图,可以修改其刷新方式,比如把物化视图mv_name的刷新方式修改为每天晚上10点刷新一次alter materialized view mv_name refresh force on demand start with sysdate next to_date(concat(to_char(sysdate+1,'dd-mm-yyyy'),' 22:00:00'),'dd-mm-yyyy hh24:mi:ss')

    8、物化视图具有表一样的特征

    所以可以像对表一样,我们可以为它创建索引,创建方法和对表一样。

    9、物化视图的删除

    虽然物化视图是和表一起管理的,但是在经常使用的PLSQL工具中,并不能用删除表的方式来删除(在表上右键选择‘drop’并不能删除物化视图),可以使用语句来实现:drop materialized view mv_name

    10.普通视图和物化视图的区别

    答曰:

    普通视图和物化视图根本就不是一个东西,说区别都是硬拼到一起的,首先明白基本概念,普通视图是不存储任何数据的,他只有定义,在查询中是转换为对应的定义SQL去查询,而物化视图是将数据转换为一个表,实际存储着数据,这样查询数据,就不用关联一大堆表,如果表很大的话,会在临时表空间内做大量的操作。

    11.普通视图的三个特征:

    1、是简化设计,清晰编码的东西,他并不是提高性能的,他的存在只会降低性能(如一个视图7个表关联,另一个视图8个表,程序员不知道,觉得很方便,把两个视图关联再做一个视图,那就惨了),他的存在未了在设计上的方便性
    2、其次,是安全,在授权给其他用户或者查看角度,多个表关联只允许查看,不允许修改,单表也可以同WITH READ ONLY来控制,当然有些项目基于视图做面向对象的开发,即在视图上去做INSTAND OF触发器虽然开发上方便,但是未必是好事。
    3、从不同的角度看不同的维度,视图可以划分维度和权限,并使多个维度的综合,也就是你要什么就可以从不同的角度看,而表是一个实体的而已,一般维度较少(如:人员表和身份表关联,从人员表可以查看人员的维度统计,从身份看,可以看不同种类的身份有那些人或者多少人),其次另一个如系统视图USER_TABLE、TAB、USER_OBJECTS这些视图,不同的用户下看到的肯定是不一样的,看的是自己的东西。

    物化视图呢,用于OLAP系统中,当然部分OLTP系统的小部分功能未了提高性能会借鉴一点点,因为表关联的开销很大,所以在开发中很多人就像把这个代价交给定期转存来完成,ORACLE当然也提供了这个功能,就是将视图(或者一个大SQL)的信息转换为物理数据存储,然后提供不同的策略:定时刷还是及时刷、增量刷还是全局刷等等可以根据实际情况进行选择,总之你差的是表,不是视图。

    12. 关于在刷新和索引上的区别

    答曰:
    他们两个没有联系吧,刷新我不清楚你是否指的是物化视图的刷新,因为刷新的概念很泛,你说到这里我就理解为物化视图的刷新了,上面也已经说了,这是一种策略和方法,其实它是通过对视图关联表上创建相应的LOG,根据日志信息的SQL同步到物化视图中的,一般来说:定时的一般是全局刷,及时的一般是局部刷。

    而索引这个说起来就多了,可以说索引专门是一门课程,大概点来说,索引一般有普通索引、位图索引、唯一性索引(还有全文索引啥的,一般不用),其实仔细研究会发现无论是那一种索引都是B+树为基础,并起存放方式和表一样,是以段为单位,只是内部有树关系而已。
    1、普通索引是根据B+树找到第一个(索引时有序的),然后以当前为基准,向后顺序找到不符合条件的健值为止。
    2、位图是在叶子节点上根据位图种类对叶子节点的值进行01编码存放(如该字段有1、2、3三种值,就会在叶子节点上有三个位图,每个位图根据健值和ROWID顺序存放是否为1、是否为2、是否为3,所以在RBO下统计很快,CBO下一般会认为是普通索引)。
    3、也是按照B+树找,只是找到就不再做任何操作,因为是唯一的。

    因为B+查找是一个类似表的查询,而且获取到ROWID后还是要回表查询的,所以这个过程的开销要和全表扫描计算那个结果更加快,ORACLE才会选择是走索引还是走全表扫描,当然对于CBO和RBO选择的方式不一样,具体又是很多,CBO要依赖于表的统计信息,RBO是依赖于尝试。

    物化视图操作示例

    -- 物化视图操作示例
    
    -- 删除物化视图
    DROP MATERIALIZED VIEW V_RPT_ACT_ACTION;
    
    
    -- 创建物化视图
    
    /**
     1.创建方式(BuildMethods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。
     BUILD IMMEDIATE是在创建物化视图的时候就生成数据。
     BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE。
     
     2. 查询重写(QueryRewrite):包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。
     分别指出创建的物化视图是否支持查询重写。
     查询重写是指当对物化视图的基表进行查询时,
     Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,
     而直接从已经计算好的物化视图中读取数据。默认为DISABLE QUERY REWRITE。
    
     */
    CREATE MATERIALIZED VIEW V_RPT_ACT_ACTION  
      BUILD IMMEDIATE  
      DISABLE QUERY REWRITE
    AS  
      SELECT * FROM T_ACT_ACTION;
        
    -- 查询物化视图    
    SELECT * FROM V_RPT_ACT_ACTION ORDER BY V_RPT_ACT_ACTION.ACTION_VALUE;
    
    -- 刷新物化视图 刷新时间间隔。每1天刷新一次,时间为凌晨10点
    ALTER MATERIALIZED VIEW V_RPT_ACT_ACTION 
    REFRESH FORCE ON DEMAND 
    START WITH SYSDATE NEXT TO_DATE(CONCAT(TO_CHAR(SYSDATE+1,'DD-MM-YYYY'),' 22:00:00'),'DD-MM-YYYY HH24:MI:SS');
    
    -- 使用DBMS_MVIEW.REFRESH 手工刷新,刷新物化视图,可以放在存储过程中刷新,存储过程不用写EXEC
    -- DBMS_MVIEW.REFRESH('V_RPT_ACT_ACTION'); 
    
    
    -- EXEC DBMS_MVIEW.REFRESH('V_RPT_ACT_ACTION');  
    -- EXEC DBMS_REFRESH.REFRESH('V_RPT_ACT_ACTION');
    
    -- 完全刷新
    -- EXEC DBMS_MVIEW.REFRESH(LIST => 'V_RPT_ACT_ACTION',METHOD => 'c');  
    -- EXEC DBMS_MVIEW.REFRESH('V_RPT_ACT_ACTION','C');  
    
    --快速刷新   
    -- 表 "BOEREMS"."T_ACT_ACTION" 不带实体化视图日志
    
    -- EXEC DBMS_MVIEW.REFRESH(LIST => 'V_RPT_ACT_ACTION',METHOD => 'f');  
    -- EXEC DBMS_MVIEW.REFRESH('V_RPT_ACT_ACTION','F');  
    
    SELECT SYS_GUID() FROM DUAL;
    
    -- 查询物化视图上次刷新时间
    -- LAST_REFRESH_DATE  上次刷新时间
    
    SELECT * FROM USER_MVIEWS 
        WHERE MVIEW_NAME = 'V_RPT_ACT_ACTION';
    
    -- 手动刷新物化视图
    BEGIN
       DBMS_MVIEW.REFRESH('V_RPT_ACT_ACTION');
    END;
    
    CREATE OR REPLACE PROCEDURE USP_RVW_REFRESH_VIEW
    
    AS
    
     BEGIN
    
         -- 刷新物化视图
        DBMS_OUTPUT.PUT_LINE('######');
        
        -- DBMS_MVIEW.REFRESH('V_RPT_ACT_ACTION'); 
    
        DBMS_MVIEW.REFRESH('V_RPT_OBJECTIVE_QUESTIONS','C');
        
        -- EXECUTE IMMEDIATE 'DROP MATERIALIZED VIEW V_RPT_OBJECTIVE_QUESTIONS';   
        
        DBMS_MVIEW.REFRESH('V_RPT_COURSE_STUDENT','C');
        DBMS_MVIEW.REFRESH('V_RPT_EXAM_STUDENT','C');
        
        -- CALL DBMS_MVIEW.REFRESH('V_RPT_COURSE_STUDENT ','C');
        -- CALL DBMS_MVIEW.REFRESH('V_RPT_EXAM_STUDENT ','C');
    
        DBMS_OUTPUT.PUT_LINE('###### FINISH');
    
    END USP_RVW_REFRESH_VIEW;
    

    转载链接,若侵删
    https://www.jianshu.com/p/a06b3436f5ed
    https://blog.csdn.net/joshua_peng1985/article/details/6213593?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-5.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-5.control


    展开全文
  • 普通视图和物化视图的区别 https://blog.csdn.net/aiynmimi/article/details/54287320 Oracle物化视图快速刷新、多表连接、聚集 https://blog.csdn.net/demonson/article/details/81451985 Oracle 物化视图 说明...

    普通视图和物化视图的区别

    https://blog.csdn.net/aiynmimi/article/details/54287320

    Oracle物化视图快速刷新、多表连接、聚集

    https://blog.csdn.net/demonson/article/details/81451985

    Oracle 物化视图 说明

    https://www.cnblogs.com/xiaohuilong/p/5995596.html

    ORACLE物化视图(物理视图)

    https://www.cnblogs.com/qqzy168/p/3689334.html

     

    官方文档

    https://docs.oracle.com/cd/E11882_01/server.112/e10706/repmview.htm#REPLN266

    物化视图的快速刷新

    https://yq.aliyun.com/articles/576823

    Oracle 物化视图 快速刷新 限制 说明

    https://blog.csdn.net/tianlesoftware/article/details/7719679

    Oracle物化视图的创建及使用

    https://www.cnblogs.com/jianshuai520/p/10246136.html

     

    刚看了一下10g的快速刷新限制条件,明确说明了包含分析函数的物化视图是无法快速刷新的:

    General Restrictions on Fast Refresh
    The defining query of the materialized view is restricted as follows:

    The materialized view must not contain references to non-repeating expressions like SYSDATE and ROWNUM.

    The materialized view must not contain references to RAW or LONG RAW data types.

    It cannot contain a SELECT list subquery.

    It cannot contain analytical functions (for example, RANK) in the SELECT clause.

    It cannot contain a MODEL clause.

    It cannot contain a HAVING clause with a subquery.

    It cannot contain nested queries that have ANY, ALL, or NOT EXISTS.

    It cannot contain a [START WITH …] CONNECT BY clause.

    It cannot contain multiple detail tables at different sites.

    On-commit materialized view cannot have remote detail tables.

    Nested materialized views must have a join or aggregate.

    转载于:https://www.cnblogs.com/hwubin5/p/10450810.html

    展开全文
  • 普通视图和物化视图的区别  物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。...
  • 普通视图和物化视图的区别答曰:普通视图和物化视图根本就不是一个东西,说区别都是硬拼到一起的,首先明白基本概念,普通视图是不存储任何数据的,他只有定义,在查询中是转换为对应的定义SQL去查询,而物化视图是...
  • 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。 普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并...
  • 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有...
  • 物化视图是一种特殊的...二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证基表数据的一致性;而ON COMMIT是说,一旦基表有了COMMIT
  • 转自[url=http://topic.csdn.net/u/20100723/14/d8c6c687-5654-493c-9ef3-aa037e91c903.html]普通视图和物化视图的区别[/url],[url=http://c-c.iteye.com/blog/716392]物化视图简单语法[/url] 创建物化视图: ...
  • 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。 普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有...
  • 普通视图和物化视图的区别(转)

    千次阅读 2018-11-23 08:42:50
    物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。 普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 146
精华内容 58
关键字:

普通视图和物化视图