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