您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Mysql執行計劃原理是怎樣的呢,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
Mysql性能優化,從一名高級碼農的角度,我們不能像java語言一樣,通過debug來調試我們的業務SQL,那么我們怎么去驗證優化之后的SQL語義呢,那么就是執行計劃。
執行計劃所包含的角色:
ORM框架
連接池
Mysql Server
存儲引擎
那么負責生成執行計劃的組件是什么?
回答:專門負責優化SELECT語句的優化器模塊MySQL Query Optimizer通過計算分析收集的各種系統統計信息,為Query給出最優的執行計劃——最優的數據檢索方式。
MySQL Query Optimizer位于Mysql Server端,是Mysql自有的,與存儲引擎無關。
當MySQL Query Optimizer接收到Query Parser(解析器)傳遞過來的Query時,會根據MySQL Query語句的相應語法對該Query進行分解分析,同時還會做很多其他的計算轉化工作,如常量轉化,無效內容刪除,常量計算等。
MySQL Query Tree以Tree類型的數據結構存放數據處理的流程,指明了完成Query必須要經過的步驟,每一步的數據來源在哪里,處理方式是怎樣的。MySQL使用了LEX和YACC語法(詞法)分析工具生成MySQL Query Tree。
客戶端向MySQL發送Query請求,命令解析器模塊完成請求分類,把SELECT Query轉發給MySQL Query Optimizer,MySQL Query Optimizer首先會對整條Query進行優化,進行常量表達式的預算,直接換算成常量值。并對Query中的查詢條件進行簡化和轉換,如去掉一些無用或顯而易見的條件、結構調整等。然后分析Query中的Hint信息(如果有),看Hint信息是否可以完全確定該Query的執行計劃。如果沒有Hint或Hint信息還不足以完全確定執行計劃,則會讀取所涉及對象的統計信息,根據Query進行相應的計算分析,最后得出執行計劃。
比較籠統的總結,Mysql會將整個客戶端傳過來的SQL語句,生成一顆指令樹( MySQL Query Tree),然后通過存儲引擎執行這顆指令樹,最終的執行計劃會包含了重構查詢語句的全部信息,也就是Mysql的多表查詢會從一個表開始一直嵌套循環、回溯完成所有表關聯,本質上會是一顆左側深度優先樹。
關于Mysql執行計劃原理是怎樣的呢就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。