我有一个物化视图,我想改变它的刷新时间:
REFRESH FORCE START WITH SYSDATE NEXT SYSDATE +1 DISABLE QUERY REWRITE
我想知道一些事情。
答案 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小时运行一次!