物化视图 - Oracle

时间:2011-12-08 23:03:29

标签: sql oracle materialized-views

我有一个物化视图,我想改变它的刷新时间:

REFRESH FORCE START WITH SYSDATE NEXT SYSDATE +1 DISABLE QUERY REWRITE

我想知道一些事情。

  1. NEXT SYSDATE +1描述了什么(我将如何更改它)
  2. 什么是DISABLE QUERY REWRITE
    换句话说,DISABLE QUERY REWRITE与ENABLE QUERY REWRITE相关的物化视图。

2 个答案:

答案 0 :(得分:4)

oracle中的实体化视图支持一个名为Query Rewriting的功能。这意味着数据库可以分析对基表的特定查询,确定是否从实例化视图返回相同的结果,并查询MV而不是基表。在某些情况下,这可能是一个非常好的优化。告诉oracle禁用查询重写意味着放弃这种潜在的优化,并且即使对MV的查询将返回相同的数据,也总是查询基表。

示例是:

create materialized view emp_salary
  refresh fast on commit
  as
     select first_name, last_name, salary
     from employee, pay_rate
     where employee.id = pay_rate.employee_id
;

然后执行查询:

     select last_name, salary
     from employee, pay_rate
     where employee.id = pay_rate.employee_id

查询引擎可以采用上面的常规select语句,并直接从物化视图中检索数据,而不必进行可能昂贵的连接(因为连接已经由MV完成)。这是查询重写。

This question描述了with sysdate next子句的作用。显然,它告诉数据库下一个刷新日期将在1天内(sysdate +1)。

答案 1 :(得分:1)

物化视图的一个主要优点是能够使用查询重写...不确定为什么要禁用查询重写。

query rewrite允许使用物化视图而不是实际的详细信息表。

oracle使用NEXT值来确定第一次自动刷新。所以在你的例子中,它将在创建后的第一天第一次刷新,并从那时起每天刷新。

更改为SYSDATE + 6/24,每6小时运行一次!