李凡
摘 要:在Oracle數(shù)據(jù)庫中,查詢優(yōu)化是數(shù)據(jù)庫設(shè)計(jì)的關(guān)鍵環(huán)節(jié),它涉及到數(shù)據(jù)庫軟件的整體優(yōu)劣,普通視圖的查詢時(shí)間長,系統(tǒng)開銷大,采用物化視圖勢(shì)在必行,以下就物化視圖的結(jié)構(gòu)進(jìn)行分析,通過比較,闡明物化視圖在大數(shù)據(jù)環(huán)境下的重要性。
關(guān)鍵字:數(shù)據(jù)庫;查詢優(yōu)化;物化視圖
1 物化視圖的定義
物化視圖就是具有物理存儲(chǔ)的特殊視圖,占據(jù)物理空間。它是用于預(yù)先計(jì)算并保存表連接或聚集等耗時(shí)較多操作的結(jié)果,這樣,在執(zhí)行查詢時(shí),就可以避免進(jìn)行這些耗時(shí)的操作,從而快速的得到結(jié)果。它需要和源表進(jìn)行同步,不斷刷新物化視圖中的數(shù)據(jù)。
2 普通視圖的局限
在Oracle 中使用普通視圖時(shí),如果這樣的視圖有多張表的JOIN或ORDER BY子句,而且表相當(dāng)大,則會(huì)相當(dāng)耗時(shí),使用普通視圖的查詢效率很低,視圖查詢內(nèi)部過程如圖1所示。為了解決這個(gè)問題,Oracle提出了物化視圖的概念,物化視圖是具有物理存儲(chǔ)的特殊視圖,它占用存儲(chǔ)空間,可以進(jìn)行分區(qū)和創(chuàng)建索引等操作。
3 基于物化視圖的查詢
在Oracle 中用戶如果創(chuàng)建了基于基表的物化視圖,系統(tǒng)將自動(dòng)計(jì)算且使用物化視圖來完成查詢,畢竟物化視圖在某些情況下可以節(jié)約時(shí)間,減少系統(tǒng)開銷,
我們把Oracle 中基于物化視圖的查詢稱為查詢重寫。提高查詢性能是物化視圖的一大優(yōu)點(diǎn),Oracle優(yōu)化器就是通過代價(jià)計(jì)算來選擇物化視圖,通過查詢重寫來完成用戶查詢。優(yōu)化器自動(dòng)判斷一個(gè)物化視圖是否滿足用戶的查詢要求,以及是否可以提高查詢性能,如果滿足要求且可以提高查詢性能,優(yōu)化器就重寫用戶提交的查詢,以使用物化視圖,查詢重寫對(duì)用戶而言是不可見的。
4 物化視圖的同步
物化視圖是基于基表創(chuàng)建的,所以當(dāng)基表變化時(shí),需要同步數(shù)據(jù)以更新物化視圖中的數(shù)據(jù),從而保持物化視圖中的數(shù)據(jù)和基表中的數(shù)據(jù)一致性。Oracle提供了兩種
物化視圖的刷新方式,即ON COMMIT方式和ON DEMAND方式。使用ON COMMIT方式,當(dāng)一個(gè)基表的變化提交時(shí),則物化視圖自動(dòng)更新,完成與基表的同步。而使用ON DEMAND方式時(shí),需要手動(dòng)同步物化視圖和基表數(shù)據(jù),此時(shí)必須執(zhí)行REFRESH過程來同步物化視圖。
5 物化視圖的創(chuàng)建
用戶可以根據(jù)自己的需要來創(chuàng)建物化視圖,以解決由于JOIN 和ORDERB BY子句帶來的查詢耗時(shí)問題。首先要?jiǎng)?chuàng)建物化視圖的前提條件,就是用戶必須具有創(chuàng)建物化視圖的權(quán)限,然后是創(chuàng)建物化視圖的日志,用戶選擇刷新類型為FAST的同步基表,使用FAST類型同步物化視圖如圖表2所示,所以要對(duì)這兩個(gè)基表創(chuàng)建物化視圖日志,最后是創(chuàng)建物化視圖及刪除相應(yīng)的物化視圖。
6 物化視圖的使用環(huán)境
物化視圖適用于數(shù)據(jù)倉庫、分布式計(jì)算以及移動(dòng)計(jì)算等環(huán)境。對(duì)于數(shù)據(jù)倉庫需要的基表匯總,物化視圖用戶進(jìn)行類似的計(jì)算來存儲(chǔ)聚合后的數(shù)據(jù)。在分模式環(huán)境中可以通過物化視圖實(shí)現(xiàn)不同節(jié)點(diǎn)間的數(shù)據(jù)同步,使得同樣的數(shù)據(jù)分布在不同的物理空間,更好地響應(yīng)用戶的查詢,減少中心數(shù)據(jù)庫服務(wù)器的負(fù)擔(dān),物化視圖在分布式環(huán)境中的應(yīng)用如圖3所示,對(duì)于移動(dòng)計(jì)算環(huán)境,也是利用物化視圖的優(yōu)化查詢功能來節(jié)約查詢時(shí)間,同時(shí)移動(dòng)客戶端使用物化視圖下載一個(gè)數(shù)據(jù)子集,也可以定期地從中央服務(wù)器獲取新數(shù)據(jù),在客戶端修改后發(fā)到中央服務(wù)器。
7 結(jié)束語
物化視圖極大地方便了用戶對(duì)于數(shù)據(jù)的操作,不但增加了對(duì)表訪問的安全性,而且減少了很多復(fù)雜的查詢過程,引入物化視圖,是基于Oracle新版本提出的理念,物化視圖可以用于預(yù)先計(jì)算并保存表連接或聚集等耗時(shí)較多操作的結(jié)果,這樣,在執(zhí)行查詢時(shí),就可以避免進(jìn)行這些耗時(shí)的操作,而從快速的得到結(jié)果。物化視圖有很多方面和索引很相似:使用物化視圖的目的是為了提高查詢性能;物化視圖對(duì)應(yīng)用透明,增加和刪除物化視圖不會(huì)影響應(yīng)用程序中SQL語句的正確性和有效性;物化視圖需要占用存儲(chǔ)空間;當(dāng)基表發(fā)生變化時(shí),物化視圖也應(yīng)當(dāng)刷新??傊锘晥D是數(shù)據(jù)庫技術(shù)的發(fā)展趨勢(shì)。
參考文獻(xiàn)
[1] 劉靜濤,張明安. 基于Oracle物化視圖的數(shù)據(jù)同步研究[J]. 軟件,2015,2.
[2] 張輝,孫偉華. 基于Oracle數(shù)據(jù)庫的查詢優(yōu)化研究[J].計(jì)算機(jī)技術(shù),2015,8.
[3] 閔昭浩. 物化視圖在Oracle 數(shù)據(jù)倉庫中的研究[J]. 湖北大學(xué)學(xué)報(bào),2015,10.
[4] 林樹澤,孔浩.《Oracle DBA教程》[M]. 清華大學(xué)出版社,2012,4.