基於一些研究,似乎AGGREGATION
在物化視圖中不能使用FAST FRESH
?在這種情況下使用物化視圖還是普通視圖?
我發現一塊oracle document指出Complex Materialized View
無法快速刷新。
In some cases, an aggregate function, although it is possible to have an aggregate
function in the defining query and still have a simple materialized view.
For example, the following statement creates a complex materialized view:
CREATE MATERIALIZED VIEW hr.average_sal AS
SELECT AVG(salary) "Average" FROM [email protected];
物化視圖我創建包含多次的結果加入SUM()
聚合(6 6聯接應返回一些8 thousand
行)。該視圖應該每20秒刷新一次。 這裏是腳本
CREATE MATERIALIZED VIEW V_MVIEW$BASEVIEW
BUILD IMMEDIATE
REFRESH FAST START WITH (sysdate) NEXT (sysdate+1*20/(60*60*24)) WITH PRIMARY KEY
AS
select
cb.id as cb_id,
vb.id as vb_id,
sb.id as sb_id,
v.id as v_id, v.name as v_name,
t.t1 as t1, t.t2 as t2, t.t3 as t3,
c.id,
SUM(t.amount) as t_amount
from t
join cb on t.cb_id = cb.id
join vb on cb.vb_id = vb.id
join sb on sb.id = vb.sb_id
join v on v.id = sb.v_id
join c on c.id=cb.c_id
GROUP BY
cb.id,
vb.id,
sb.id,
v.id, v.name,
t.t1, t.t2, t.t3,
c.id
;
有了上述限制,我不能肯定它仍然甚至利用有益物化視圖更多,因爲刷新整個視圖每20第二個可能是沒有比一般的看法更好?我該如何優化這種情況?
每20秒刷新一次?這似乎有點反直覺了...如果這個腳本的運行時間超過10秒,那麼你的服務器花費了一半的時間來處理它。如果它在10秒以內,也許物化視圖不是要走的路?如果數據每20秒刷新一次,而不是每分鐘或2次,您的企業將獲得哪些收益? – Twelfth 2014-08-28 21:46:56
@Telfelf謝謝。查詢需要大約一秒鐘的時間來返回所有結果,但我們需要每20秒重複一次以獲取最新結果。我們更喜歡使用視圖的原因是爲了避免只讀數據上的事務問題,最大限度地減少I/O。也可能有其他視圖加入這個基本視圖,它們不會花費幾秒鐘的時間返回結果,但仍需要每10-30秒刷新一次。 – Dreamer 2014-08-28 21:52:19
調用這個物化視圖多少次?如果每分鐘使用50次左右......我認爲這是有道理的。我猜,作爲第二個問題,您的索引是否良好,並在此方面得到充分利用? – Twelfth 2014-08-28 22:36:49