我已经物化了要更改其刷新时间的视图:
REFRESH FORCE START WITH SYSDATE NEXT SYSDATE +1 DISABLE QUERY REWRITE
我想知道这方面的一些事情。
- NEXT SYSDATE +1 描述了什么(我将如何更改它)
- 什么是 DISABLE QUERY REWRITE
换句话说,就物化视图而言,DISABLE QUERY REWRITE vs ENABLE QUERY REWRITE。
我已经物化了要更改其刷新时间的视图:
REFRESH FORCE START WITH SYSDATE NEXT SYSDATE +1 DISABLE QUERY REWRITE
我想知道这方面的一些事情。
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)。
物化视图的主要优点之一是能够使用查询重写......不太确定为什么要禁用查询重写。
查询重写允许使用物化视图而不是实际的详细信息表。
oracle 使用 NEXT 值来确定第一次自动刷新。因此,在您的示例中,它将在创建后 1 天第一次刷新,并从那时起每天刷新。
更改为 SYSDATE + 6/24 以每 6 小时运行一次!