饒輝科
摘要:數(shù)據(jù)查詢是數(shù)據(jù)庫技術(shù)中非常重要的組成部分,查詢效率的優(yōu)劣直接影響數(shù)據(jù)庫的性能。如何高效地進(jìn)行數(shù)據(jù)查詢,一直是數(shù)據(jù)庫理論研究的重要方向。該文從查詢優(yōu)化的必要性,查詢優(yōu)化的方法等方面進(jìn)行了討論。
關(guān)鍵詞:查詢優(yōu)化;代數(shù)優(yōu)化;查詢樹
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2016)26-0008-02
1 引言
關(guān)系數(shù)據(jù)庫是當(dāng)今應(yīng)用最廣泛的數(shù)據(jù)庫系統(tǒng)。關(guān)系數(shù)據(jù)庫支持關(guān)系數(shù)據(jù)模型。關(guān)系數(shù)據(jù)結(jié)構(gòu)非常單一,現(xiàn)實(shí)世界中的實(shí)體及實(shí)體之間的聯(lián)系都是用關(guān)系來表示,在用戶看來,關(guān)系數(shù)據(jù)結(jié)構(gòu)就是二維表。常用的關(guān)系操作包括查詢操作和插入、刪除、修改操作兩大部分,其中查詢操作的表達(dá)能力最重要。數(shù)據(jù)查詢是數(shù)據(jù)庫應(yīng)用中非常重要的組成部分,數(shù)據(jù)查詢是否具備較高的執(zhí)行效率和反應(yīng)速度受到數(shù)據(jù)庫設(shè)計(jì)者和用戶的極大關(guān)注。
2 不同查詢方案代價(jià)對比
關(guān)系模型中的查詢語言早期通常是用代數(shù)方法或邏輯方法來表示,分別稱為關(guān)系代數(shù)和關(guān)系演算,隨后出現(xiàn)一種介于關(guān)系代數(shù)和關(guān)系演算的語言稱為結(jié)構(gòu)化查詢語言,簡稱SQL。SQL語言作為關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言向用戶提供了易于掌握、高度非過程化得查詢語言。大多數(shù)商用數(shù)據(jù)庫都支持SQL語言,用戶只需指明“干什么?”不需指出“怎么干?!睂ν粋€查詢要求有不同的查詢解決方案,查詢優(yōu)化就是盡量在不同的解決方案中找到效率高、代價(jià)小的方案。
為了提升數(shù)據(jù)庫系統(tǒng)性能對數(shù)據(jù)查詢進(jìn)行優(yōu)化成了必須解決的問題,查詢優(yōu)化技術(shù)的發(fā)展與應(yīng)用,也助推了數(shù)據(jù)庫技術(shù)的推廣與普及。
下面我們通過一個實(shí)例對比不同查詢方案所花費(fèi)的代價(jià)。
商品銷售管理數(shù)據(jù)庫
銷售點(diǎn)信息表(銷售點(diǎn)編號,城市、地址,聯(lián)系電話,開設(shè)時間)
產(chǎn)品信息表(產(chǎn)品編號,產(chǎn)品名,類型,規(guī)格,生產(chǎn)廠家,進(jìn)貨價(jià)格)
銷售情況表(銷售點(diǎn)編號,產(chǎn)品編號,銷售量,銷售單價(jià))
求銷售產(chǎn)品編號為JD051這種產(chǎn)品的銷售點(diǎn)信息?
用SQL語言表達(dá)該查詢:
Select 銷售點(diǎn)信息表.*
From 銷售點(diǎn)信息表 , 銷售情況表
Where 銷售點(diǎn)信息表.銷售點(diǎn)編號=銷售情況表.銷售點(diǎn)編號 and 產(chǎn)品編號=JD051
SQL語言是高度的非過程化語言,同一個查詢要求可以有不同的執(zhí)行方式。下面針對上述查詢要求運(yùn)用關(guān)系代數(shù)表達(dá)式來表示不同的執(zhí)行方式。
方案1
Π銷售點(diǎn)信息表.*(σ銷售點(diǎn)信息表.銷售點(diǎn)編號=銷售情況表.銷售點(diǎn)編號∧銷售情況表.產(chǎn)品編號=JD051(銷售點(diǎn)信息表×銷售情況表))
第一種方式需要占用內(nèi)存空間保留廣義笛卡爾積的中間結(jié)果,讀取數(shù)據(jù)量過多及耗時較長;
方案2
Π銷售點(diǎn)信息表.*(σ產(chǎn)品編號=JD051(銷售點(diǎn)信息表∞銷售情況表))
第二種方案相比第一種方式減少了中間結(jié)果,使用自然連接相比笛卡爾積大大減少了中間結(jié)果;
方案3
Π銷售點(diǎn)編號(σ產(chǎn)品編號=JD051 (銷售情況表))∞銷售點(diǎn)信息表
第三種方式減少了數(shù)據(jù)讀取量,中間結(jié)果相比第二種情況更少??偟牟樵儠r間最短、查詢代價(jià)最少。
以上三種表達(dá)式雖然等價(jià),但其執(zhí)行的查詢策略不同,數(shù)據(jù)規(guī)模越大,查詢所花費(fèi)的代價(jià)差別就越大。通過三種不同查詢方式的對比,說明查詢優(yōu)化的必要性,選擇合適的查詢策略將大大減少查詢時間、降低查詢代價(jià),因此查詢優(yōu)化問題一直是數(shù)據(jù)庫研究的重點(diǎn)。
3 關(guān)系數(shù)據(jù)庫查詢處理過程
當(dāng)用戶發(fā)出查詢請求,要采用不同的處理步驟對原始查詢進(jìn)行轉(zhuǎn)換,這些轉(zhuǎn)換工作必須在系統(tǒng)處理查詢請求和返回查詢結(jié)果前完成。關(guān)系數(shù)據(jù)庫查詢處理過程如圖1所示。
圖1
主要步驟:語法分析與翻譯處理,查詢優(yōu)化處理,執(zhí)行。
4 查詢優(yōu)化技術(shù)分類
查詢優(yōu)化技術(shù)一般分為代數(shù)優(yōu)化和非代數(shù)優(yōu)化(物理結(jié)構(gòu)優(yōu)化)。
1)代數(shù)優(yōu)化,通過對查詢語句進(jìn)行變換,改變基本操作的次序,使查詢語句執(zhí)行起來更有效,這種查詢優(yōu)化僅涉及查詢語句本身,而不涉及實(shí)際存取路徑,稱為獨(dú)立于存取路徑的優(yōu)化,或代數(shù)優(yōu)化。
查詢是由高級查詢語言表示的對數(shù)據(jù)庫的一個或一組操作的集合,通常由投影、選擇、連接、笛卡爾積等操作符組成。通過語法分析功能分析查詢語句的正確性、完整性、有效性,并將其轉(zhuǎn)換為等價(jià)關(guān)系代數(shù)查詢樹,如圖2。
根據(jù)關(guān)系代數(shù)等價(jià)變換規(guī)則,查詢樹可以按以下方法進(jìn)行變換:
方法1:下移選擇和投影運(yùn)算,以減少中間結(jié)果的元組數(shù)和參與運(yùn)算的關(guān)系的規(guī)模;
方法2:將某些選擇運(yùn)算與笛卡爾積運(yùn)算相結(jié)合;
方法3:同時執(zhí)行同一個關(guān)系上的選擇、投影運(yùn)算,減少對關(guān)系的掃描次數(shù);
方法4:將連接運(yùn)算與投影運(yùn)算結(jié)合起來執(zhí)行。
圖2可變換為圖3。
對比圖2和圖3選擇運(yùn)算和投影運(yùn)算優(yōu)先執(zhí)行,減少了查詢中間結(jié)果的元組數(shù),大大降低了參與連接運(yùn)算的關(guān)系規(guī)模。
在制定具體的查詢策略時應(yīng)盡量減少對數(shù)據(jù)表的訪問,減少對磁盤的訪問次數(shù),訪問磁盤所需的時間大大長于對內(nèi)存的訪問時間,減少對磁盤的訪問次數(shù)將大大降低系統(tǒng)的響應(yīng)時間。選擇運(yùn)算盡可能提前做,往往可以使執(zhí)行時間降低幾個數(shù)量級,通過選擇運(yùn)算減少中間結(jié)果。在執(zhí)行連接操作前,對關(guān)系進(jìn)行適當(dāng)?shù)念A(yù)處理,在連接的字段上建立索引以及對關(guān)系進(jìn)行排序,加快查詢速度。
關(guān)系代數(shù)優(yōu)化的一般步驟:[3]
(a)把查詢轉(zhuǎn)換成語法樹;(b)優(yōu)化語法樹;(c)選擇低層次的存取路徑;(d)選擇代價(jià)較小的查詢方案。
2)非代數(shù)優(yōu)化,也稱物理結(jié)構(gòu)優(yōu)化。數(shù)據(jù)庫物理結(jié)構(gòu)是整個數(shù)據(jù)庫存儲的基礎(chǔ),物理結(jié)構(gòu)設(shè)計(jì)是在邏輯結(jié)構(gòu)設(shè)計(jì)的基礎(chǔ)上完成的,應(yīng)確保數(shù)據(jù)庫存儲和訪問或操作數(shù)據(jù)表具有較高的執(zhí)行效率。物理結(jié)構(gòu)優(yōu)化是指為數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)推薦合適的物理存儲位置或存儲結(jié)構(gòu),以及為查詢推薦合適的存取路徑,進(jìn)而提升系統(tǒng)的整體性能。
5 小結(jié)
查詢優(yōu)化技術(shù)是數(shù)據(jù)庫中一項(xiàng)重要的技術(shù)。對于的查詢要求,我們應(yīng)該根據(jù)數(shù)據(jù)規(guī)模大小,具體的物理存儲結(jié)構(gòu)等因素進(jìn)行分析,選擇合適的查詢策略。具體的SQL查詢語句應(yīng)根據(jù)代數(shù)優(yōu)化的相關(guān)原則進(jìn)行變換,提高查詢效率。查詢優(yōu)化目的是為了提升系統(tǒng)的性能,如果進(jìn)行優(yōu)化本身需要花費(fèi)的代價(jià)過大,反而會降低系統(tǒng)的性能。所以只有兼顧了查詢效率、控制系統(tǒng)開銷、保障數(shù)據(jù)庫安全等諸多方面才能真正地優(yōu)化系統(tǒng)的性能。
參考文獻(xiàn):
[1] 馮衛(wèi)兵.關(guān)系數(shù)據(jù)庫的查詢優(yōu)化[J].現(xiàn)代計(jì)算機(jī),2010(1).
[2] 王能斌.數(shù)據(jù)庫系統(tǒng)原理[M].北京:電子工業(yè)出版社,2001.
[3] 薩師煊,王珊. 數(shù)據(jù)庫系統(tǒng)概論[M].3版.北京:高等教育出版社,2000.
[4] 谷震離.關(guān)系數(shù)據(jù)庫查詢方法研究[J].微計(jì)算機(jī)信息,2006.
[5] 崔躍生,張勇,曾春,等.數(shù)據(jù)庫物理結(jié)構(gòu)優(yōu)化技術(shù)[J].軟件學(xué)報(bào),2013,24(4).
[6] 梁志宏,勒延安,周華.等價(jià)關(guān)系代數(shù)查詢優(yōu)化方法的研究[J].山西師范大學(xué)學(xué)報(bào):自然科學(xué)版,2004.
[7] 王崢,王亞平.關(guān)系代數(shù)與SQL查詢優(yōu)化的研究[J].電子設(shè)計(jì)工程,2009(8).