時間:2022-11-12 20:30:01 | 來源:信息時代
時間:2022-11-12 20:30:01 來源:信息時代
實體化視圖 : 一個其內(nèi)容已計算并存儲的視圖。用CREAT VIEW語句定義視圖時,DBMS只將視圖的定義存在數(shù)據(jù)字典中,這種視圖不對應(yīng)實際數(shù)據(jù)存儲,當(dāng)引用視圖時DBMS臨時去執(zhí)行視圖的定義。這種視圖的好處是維護(hù)方便,更新基本表時不會影響其上定義的視圖。
實體化視圖則不僅存儲視圖的定義,而且存儲視圖對應(yīng)的數(shù)據(jù),一些查詢可以直接用實體化視圖中的數(shù)據(jù)回答,從而加快了查詢速度。但實體化視圖中的數(shù)據(jù)屬于冗余數(shù)據(jù),是由基本表中的數(shù)據(jù)轉(zhuǎn)換得到的,因而當(dāng)基本表更新時,實體化視圖必須使用有效手段進(jìn)行維護(hù)。顯然實體化視圖更適合以查詢?yōu)橹鞯膽?yīng)用。
實體化視圖技術(shù)涉及的問題包括: 選擇哪些視圖進(jìn)行實體化能帶來最大收益? 當(dāng)基本表修改時如何維護(hù)實體化視圖?查詢優(yōu)化器如何利用實體化視圖優(yōu)化查詢?
在選擇視圖進(jìn)行實體化的時候,需要考慮下列因素:這些視圖實體化后要有利于以后的查詢操作,實體化這些視圖時需要的空間開銷要小,對這些實體化的視圖進(jìn)行維護(hù)的開銷要小。確定實體化視圖的典型方法是貪心算法,其基本思想是根據(jù)視圖之間的依賴關(guān)系,在一定的存儲空間約束下,選擇獲益最大的那些視圖進(jìn)行實體化。
當(dāng)實體化視圖所依賴的基本表發(fā)生更新時,實體化視圖必須進(jìn)行維護(hù)。實體化視圖維護(hù)的簡單方法是對相應(yīng)的基表設(shè)置觸發(fā)器,當(dāng)基表更新時觸發(fā)實體化視圖的重新計算。實體化視圖維護(hù)的更有效的方法是增量維護(hù),即用基本表的變化量計算視圖的變化量,用變化量去修改視圖。一般情況下,增量維護(hù)的代價比重計算要低。
視圖增量維護(hù)的基本原理是: 對每一個視圖,根據(jù)它的定義,導(dǎo)出一個增量維護(hù)表達(dá)式,通過計算得到視圖的增量。例如, V=R1⋈R2。用△R和▽R分別表示插入到R和從R中刪除的元組。當(dāng)R1中新增加了元組△R1時, 因此,V=(R1+△R1)⋈R2=R1⋈R2+△R1⋈R2。 V的增量表達(dá)式為△R1⋈R2。同樣,當(dāng)從R1中刪除元組▽R1時,V的增量表達(dá)式為▽R1⋈R2。
根據(jù)維護(hù)的時機,實體化視圖的增量維護(hù)算法可以分為立即維護(hù)(immediate)和延遲維護(hù)(deferred)兩大類。立即維護(hù)是一個事務(wù)在提交前,要將對一個表所做的修改反映到所有引用該表的視圖中,視圖維護(hù)成為事務(wù)的一部分,加重了事務(wù)的負(fù)擔(dān),但可以保持視圖與基本表同步變化。延遲維護(hù)是周期性地檢查和維護(hù)所有視圖,采用這種方式,視圖中的數(shù)據(jù)可能不能反映最新情況。
查詢優(yōu)化器利用實體化視圖優(yōu)化查詢的方法是查詢重寫。給定一組關(guān)系R,以及定義在R上的一組視圖V和查詢Q,對Q中的查詢q,如果存在查詢q1,其中q1至少引用了V中的一個視圖,而且對任意的數(shù)據(jù)庫實例D,q1(D)=q(D),則稱q1是q的查詢重寫。如果q1只引用了V中的視圖,而沒有引用R中的任何關(guān)系,則稱上述的查詢重寫q1為完全重寫,否則稱為部分重寫。
對于一個select-project-join查詢,視圖V可用的條件是:
(1)必須存在從視圖V的FROM子句中表到查詢Q的FROM子句中表的一個映射,可以是一個多對一的映射。
(2) V不能丟棄Q所需要的任何元組。
(3) V不能投影掉Q所需要的任何屬性,除非這些屬性可以通過其他的視圖進(jìn)行恢復(fù)。
在不考慮實體化視圖的傳統(tǒng)查詢優(yōu)化中,優(yōu)化器可以根據(jù)FROM子句確定與查詢相關(guān)的表。而支持實體化視圖的查詢優(yōu)化,需要根據(jù)上面說明的視圖可用性條件決定哪些視圖與查詢是相關(guān)的,從中去除代價高的視圖,當(dāng)能夠確定利用該視圖可以降低查詢代價時,利用該視圖重寫查詢。例如,用戶提交的查詢是R⋈S⋈T,有實體化視圖V=R⋈S,這時可以將用戶查詢重寫為V⋈T,利用實體化視圖回答用戶查詢。
另一方面,必要時優(yōu)化器也會將基于實體化視圖的查詢重寫為基于基表的查詢。例如,用戶提交的查詢是σA=3(V),假設(shè)實體化視圖V上沒有任何索引,但在R的屬性A上有索引,在S的連接屬性B上也有索引, 這時將用戶查詢重寫為σA=3(R)⋈S,對關(guān)系R進(jìn)行索引掃描,找出滿足條件A=3的元組,然后與關(guān)系S進(jìn)行索引連接得到查詢結(jié)果,其執(zhí)行效率可能高于對實體化視圖V進(jìn)行全表掃描。
微信公眾號
版權(quán)所有? 億企邦 1997-2022 保留一切法律許可權(quán)利。