SQL優化器-RBO與CBO分別是什么


數據庫系統發展歷史

數據庫系統產生於20世紀60年代中期,至今有近50多年的歷史,其發展經歷了三代演變,造就了四位圖靈獎得主,發展成為一門計算機基礎學科,帶動了一個巨大的軟件產業。

1

數據庫系統是操作系統之上最重要的基礎設施之一,被稱為軟件產業的常青樹,特別是它所支撐起來的大數據、人工智能應用,更是發展迅猛。

面對發展快速的數據庫領域,以及人類所擁有的數據量爆發式增長,如何對海量數據進行管理、分析、挖掘便變得尤為重要。SQL優化器正是為了解決以上問題而誕生的。

查詢優化器簡介

2

SQL優化器,其中最重要的一個組件是查詢優化器,是數據庫系統的重要組成部分。特別是對於現代大數據系統,執行計划的搜索空間異常龐大,研究人員研究了許多方法對執行計划空間進行裁剪,以減少搜索空間的代價。

在當今數據庫系統領域,查詢優化器可以說是必備組件,不管是關系型數據庫系統Oracle、MySQL,流處理領域的Flink、Storm,批處理領域的Hive、Spark SQL,還是文本搜索領域的Elasticsearch等,都會內嵌一個查詢優化器。

有的數據庫系統會采用自研的優化器,而有的則會采用開源的查詢優化器插件,比如Apache Calcite就是一個優秀的開源查詢優化器插件。而像Oracle數據庫的查詢優化器,則是Oracle公司自研的一個核心組件,負責解析SQL,其目的是按照一定的原則來獲取目標SQL在當前情形下執行的最高效執行路徑。

這里拓展一下,關於查詢優化器所要解決的核心問題:具有多個連接操作的復雜查詢優化。不少學者相繼提出了基於左線性樹的查詢優化算法、基於右線性樹的查詢優化算法、基於片段式右線性樹的查詢優化算法、基於濃密樹的查詢優化算法、基於操作森林的查詢優化算法等。這些算法在搜索代價和最終獲得的查詢計划的效率之間有着不同的權衡。

總的來說,查詢優化器在很大程度上決定了一個數據庫系統的性能,優化器的作用就好比找到兩點之間的最短路徑。

RBO(Rule-Based Optimization)

RBO: Rule-Based Optimization也即“基於規則的優化器”,該優化器按照硬編碼在數據庫中的一系列規則來決定SQL的執行計划。

以Oracle數據庫為例,RBO根據Oracle指定的優先順序規則,對指定的表進行執行計划的選擇。比如在規則中:索引的優先級大於全表掃描。

通過Oracle的這個例子我們可以感受到,在RBO中,有着一套嚴格的使用規則,只要你按照規則去寫SQL語句,無論數據表中的內容怎樣,也不會影響到你的“執行計划”,也就是說RBO對數據不“敏感”。這就要求開發人員非常了解RBO的各項細則,不熟悉規則的開發人員寫出來的SQL性能可能非常差。

但在實際的過程中,數據的量級會嚴重影響同樣SQL的性能,這也是RBO的缺陷所在。畢竟規則是死的,數據是變化的,所以RBO生成的執行計划往往是不可靠的,不是最優的。

CBO(Cost-Based Optimization)

CBO: Cost-Based Optimization也即“基於代價的優化器”,該優化器通過根據優化規則對關系表達式進行轉換,生成多個執行計划,然后CBO會通過根據統計信息(Statistics)和代價模型(Cost Model)計算各種可能“執行計划”的“代價”,即COST,從中選用COST最低的執行方案,作為實際運行方案。

CBO依賴數據庫對象的統計信息,統計信息的准確與否會影響CBO做出最優的選擇。

以Oracle數據庫為例,統計信息包括SQL執行路徑的I/O、網絡資源、CPU的使用情況。

目前各大數據庫和大數據計算引擎都傾向於使用CBO,例如從Oracle 10g開始,Oracle已經徹底放棄RBO,轉而使用CBO;而Hive在0.14版本中也引入了CBO。

參考文獻

[1] 《數據庫系統導論》(第5版) 王珊,薩師煊
[2] Oracle SQL優化器簡介[https://www.cnblogs.com/mzq123/p/10398701.html]
[3] SQL優化器簡介[https://www.cnblogs.com/jixin/p/10500096.html]
[4] 深入淺出Calcite與SQL CBO(Cost-Based Optimizer)優化[https://www.cnblogs.com/listenfwind/p/13192259.html]
[5] SQL優化器原理——查詢優化器綜述[https://zhuanlan.zhihu.com/p/40478975]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM