SQL優化--查詢優化技術分類
數據庫調優的方式通常有如下幾種:
1)人工調優。
主要依賴于人,效率低下;要求操作者完全理解常識所依賴的原理,還需要對應用、數據庫管理系統、操作系統以及硬件有廣泛而深刻的理解。
2)基于案例的調優。
總結典型應用案例情況中數據庫參數的推薦配置值、數據邏輯層設計等情況,從而為用戶的調優工作提供一定的參考和借鑒。但這種方式忽略了系統的動態性和不同系統間存在的差異。
3)自調優。
為數據庫系統建立一個模型,根據“影響數據庫系統性能效率的因素”,數據庫系統自動進行參數的配置。一些商業數據庫,實現了部分自調優技術。
查詢優化技術的分類:①查詢重用、②查詢重寫規則、③查詢算法優化、④并行查詢優化、⑤分布式查詢優化、⑥其他優化技術
1)查詢重用:是指盡可能利用先前的執行結果,以達到節約查詢計算全過程的時間并減少資源消耗的目的。
主要分為以下兩種類型:
a)查詢結果的重用。在緩存區中分配一塊緩沖塊,存放該SQL 語句文本和最后的結果集,當同樣的SQL輸入時,直接把結果返回。查詢結果的重用技術節約了查詢計劃生成時間,減少了查詢執行全過程的資源消耗。
b)查詢計劃的重用。緩存一條查詢語句的執行計劃及其相應語法樹結構。查詢計劃的重用技術減少了查詢計劃生成的時間和資源消耗。
2)查詢重寫:是查詢語句的一種等價轉換,即對于任何相關模式的任意狀態都會產生相同的結果。
查詢優化技術類型:
a)語法級。查詢語言層的優化,基于語法進行優化。
b)代數級。查詢使用形式邏輯進行優化,運用關系代數的原理進行優化。
c)語義級。根據完整性約束,對查詢語句進行語義理解,推知一些可優化的操作。
d)物理級。物理優化技術,基于代價估算模型,比較得出各種執行方式中代價最小的。
查詢重寫是基于語法級、代數級、語義級的優化,可以統一歸屬到邏輯優化的范疇:基于代價估算模型是物理層面的優化,是從連接路徑中選擇代價最小的路徑的過程。
查詢優化重寫思路:
a)將過程性查詢轉換為描述性的查詢,如視圖重寫。
b)將復雜的查詢(如嵌套子查詢、外連接消除、嵌套連接消除)盡可能轉換為多表連接查詢。
c)將效率低的謂詞轉換為等價的效率高的謂詞(如等價謂詞重寫)。
3)查詢優化算法:求解給定查詢語句的高效執行計劃的過程。也就是查詢計劃,也稱為查詢樹,它由一系列內部的操作符組成,這些操作符按一定的運算關系構成查詢的一個執行方案。
生成最優查詢計劃的策略:
a)基于規則優化。
根據經驗或一些已經探知或被證明有效的方式,定義為“規則”(如根據關系代數得知的規則、根據經驗得知的規則等),用這些規則化簡查詢計劃生成過程中符合可被化簡的操作,使用啟發式規則排除一些明顯不好的存取路徑,這就是基于規則的優化。
b)基于代價優化。
根據一個代價評估模型,在生成查詢計劃的過程中,計算每條存取路徑(存取路徑主要包括上述三個“關系結點”)的花費,然后選擇代價最小的作為子路徑,這樣直至所有表連接完畢得到一個完整的路徑。主流數據庫都采用了基于規則和基于代價的技術。
4)并行查詢優化:在并行數據庫系統中,查詢優化的目標是尋找具有最小響應時間的查詢執行計劃,這需要把查詢工作分解為一些可以并行運行的子工作。一些商業數據庫提供了并行查詢的功能,用以優化查詢執行操作。
在同一個SQL內,查詢并行可以分為:
a)操作內并行。將同一操作如單表掃描操作、兩表連接操作、排序操作等分解成多個獨立的子操作,由不同的CPU同時執行。
b)操作間并行。一條SQL查詢語句可以分解成多個子操作,由多個CPU執行。
5)分布式查詢優化:在分布式數據庫系統中, 查詢策略優化是查詢優化的重點。主要是數據傳輸策略,A、B兩結點的數據進行連接,是A結點數據傳輸到B結點或是從B到A或是先各自進行過濾然后再傳輸等)和局部處理優化(傳統的單結點數據庫的查詢優化技術)。
在分布式數據庫系統中,代價估算模型為:
總代價 = I/O代價 + CPU代價 + 通信代價