1. 程式人生 > >資料庫優化器

資料庫優化器

資料庫的優化器在我看來就好比是人的大腦。當我們的使用者(可能是一條sql也可能是一個application,也可能是多個sql,多個application)在訪問資料庫的時候,優化器會給sql或者是app的請求提供最優質的服務。SQL是結構化的查詢語言,他在執行的時候也是需要編譯才能夠被系統識別的,但是不同於其他面向物件或者是過程的開發語言,SQL並不要制定訪問邏輯,你需要做的只是告訴資料庫你要得到什麼,至於如何才能夠幫助你收集到制定的資料的工作,是資料庫來完成的,具體的來說主要是靠優化器來完成的

在討論優化器的定義,執行機制之前,我們先來看看SQL的執行過程。

1.語法檢查:面對迎面而來的SQL,資料庫要做的是看看當前的sql是否是一個合法的公民,即是否合乎語法,如檢查無誤,則放行,並將sql的資訊做個記錄,將sql語句轉化成優化器能夠識別的關係代數語句,並生成語法樹

2.語義檢查:sql 的合法性檢查完成之後會繼續檢查語義,我的理解是看你要解決的問題是不是資料庫這裡能夠解決的,如果能則繼續,並新增一些相關的約束資訊到語法樹裡面,如約束,觸發器,檢視等

3.查詢重寫:這是sql 優化器的開始,查詢重寫器是優化器的三大元件之一。當發現我們的sql本身效率並不高,他會重寫sql,將sql轉化成效率更高的語句。這種優化可以是基於查詢成本的考慮,也可以是基於查詢規則的考慮

4.查詢訪問計劃:訪問計劃告訴我們 表的訪問順序,join的方法,是否使用index  scan,選用哪個索引比較高效。根據sql語句生成的語法樹提供的資訊,優化器能夠生成許多訪問方案,然後在根據語義檢查過程中新增的各種編目資訊,如,表,索引,列和函式等各種統計資訊。之後通過第二大元件--成本估算器來幫助我們選擇最合適的訪問計劃。

5.生成訪問計劃:由第三大元件計劃生成器完成

6.執行訪問計劃:獲取查詢結果集。

接下來重點分析access plan的選擇是如果進行的