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