2011-12-08 77 views
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相對於物化視圖。
+1

這將是一個很好的問題http://dba.stackexchange.com/,但我不知道如何投票移動(這不是一個選項)。 –

回答

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完成)。這是查詢重寫。

This question描述了with sysdate next子句的作用。顯然,它告訴數據庫,下一個刷新日期將在1天(系統日期+1)。

+0

但是,如果我查詢「select * from emp_salary」,它將帶來與「select last_name,salary from employee,pay_rate where employee.id = pay_rate.employee_id」相同的結果,甚至不啓用查詢重寫。 –

+2

@ShahJee正確,但您需要更改所有應用程序代碼以使用新的物化視圖。查詢重寫允許您的應用程序執行更高效的查詢,而無需更改應用程序。這樣,沒有人需要知道MV。他們只是坐在那裏,在適當的時候使用。 DBA現在可以編寫應用程序可以使用的更有效的查詢,而無需知道它們甚至存在。 –

1

物化視圖的主要優點之一是能夠使用查詢重寫...不太確定爲什麼你會禁用查詢重寫。

查詢重寫允許使用物化視圖來代替實際的細節表。

oracle使用NEXT值來確定第一次自動刷新。所以在你的例子中,它會在創建後1天第一次刷新,然後每天刷新。

更改爲SYSDATE + 6/24每6小時運行一次!

+0

如果我想將刷新時間更改爲每小時6次,那麼sytax會是什麼。 –

+0

我認爲你可以做sysdate + 6/24而不是sysdate + 1 – c0deNinja