2

我已经物化了要更改其刷新时间的视图:

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

我想知道这方面的一些事情。

  1. NEXT SYSDATE +1 描述了什么(我将如何更改它)
  2. 什么是 DISABLE QUERY REWRITE
    换句话说,就物化视图而言,DISABLE QUERY REWRITE vs ENABLE QUERY REWRITE。
4

2 回答 2

4

oracle 中的物化视图支持称为查询重写的功能。这意味着数据库可以分析对基表的特定查询,决定是否从物化视图返回相同的结果,并查询 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

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

这个问题描述了该with sysdate next子句的作用。显然,它告诉数据库下一次刷新日期将在 1 天后(sysdate +1)。

于 2011-12-08T23:12:26.113 回答
1

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

查询重写允许使用物化视图而不是实际的详细信息表。

oracle 使用 NEXT 值来确定第一次自动刷新。因此,在您的示例中,它将在创建后 1 天第一次刷新,并从那时起每天刷新。

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

于 2011-12-08T23:12:44.833 回答