MySQL查詢執行過程詳解


查詢是用戶通過設置某些查詢條件,從表或其他查詢中選取全部或者部分數據,以表的形式顯示數據供用戶瀏覽。查詢是一個獨立的、功能強大的、具有計算功能和條件檢索功能的數據庫對象。MySQL數據庫中,MySQL查詢同樣是數據庫的核心操作,下面我們一起來看看MySQL查詢執行過程分為那幾個步驟?

 

一、執行一個查詢過程概述

1.客戶端發送一條查詢給服務器;

2.服務器先檢查查詢緩存,如果命中了緩存,則立即返回存儲在緩存中的結果。否則進入下一階段;

3.服務器端進行SQL解析、預處理,再由優化器生成對應的執行計划;

4.MySQL根據優化器生成的執行計划,調用存儲引擎的API來執行查詢;

5.將結果返回給客戶端;

 

二、查詢緩存

1.查詢緩存保存查詢返回的完整結構;

2.命中查詢緩存時,MySQL會立即返回結果,跳過解析、優化和執行階段;

3.查詢緩存系統會跟蹤查詢中設計的每個表,如果這些表發生變化,和這個表相關的所有緩存數據都將失效;

4.判斷緩存是否命中時,不會進行解析查詢語句,直接使用MySQL語句和客戶端發送過來的其他原始信息,任何字符上的不同,例如空格、注解等,都會導致緩存不命中;

5.當查詢語句有一些不確定的數據時,則不會被緩存;

6.查詢緩存配置參數

 

三、語法解析器和預處理器

1.MySQL解析器通過關鍵字將SQL語句進行解析,並生成對應的解析樹;

2.MySQL解析器將使用MySQL語法規則驗證和解析查詢,eg:驗證是否使用錯誤的關鍵字、使用關鍵字的順序是否正確、驗證引號是否前后匹配等;

3.預處理器根據一些MySQL規則進行進一步檢查解析樹是否合法,eg:檢查數據表和數據列是否存在,解析名字和別名是否有歧義;

4.下一步預處理器驗證用戶權限,查看用戶是否有操作權限,通常很快;

 

四、查詢優化器

1.優化器的作用就是找到最好的執行計划;

2.語法樹被認為是合法后,優化器將MySQL語句轉換為執行計划,一條查詢可以有多種執行方式,最后都返回相同的結果;

3.生成執行計划過程

4.MySQL使用基於成本的優化器(CBO cost-based optimizer),會預測一個查詢使用某種執行計划的成本,選擇其中成本最小的一個;

5.導致MySQL優化器選擇非最優執行計划的原因

6.MySQL可以處理的優化類型

 

五、查詢執行引擎

1.查詢執行引擎根據執行計划來完成整個查詢;

2.執行計划是一個數據結構(指令樹),不是和其他關系型數據庫那樣生成對應的字節碼;

3.mysql根據執行計划給出的指令逐步執行,在執行過程中,有大量的操作需要調用存儲引擎實現的接口來完成,這些接口即為“handler API”;

4.查詢中每一個表由一個handler的實例表示。在優化階段mysql就為每一個表創建了一個handler實例,優化器可以根據這些實例的接口獲取表的相關信息,eg:列名、索引、統計信息等;

 

六、返回客戶端結果

1.如果查詢可以被緩存,mysql會在這個階段將結果存放到查詢緩存中;

2.mysql將結果集返回給客戶端是一個增量逐步返回的過程,在查詢生成第一條結果時,mysql就可以開始向客戶端逐步返回結果了;

3.增量逐步返回的好處:服務端無須存儲太多的結果,不會因為返回太多的結果而消耗太多內存;同時讓客戶端第一時間獲得返回結果;

4.結果集中的每一行都會以一個滿足mysql客戶端/服務端通信協議的包發送,再通過tcp協議進行傳輸,傳輸過程中,可能對mysql的包進行緩存然后批量傳輸;

 

從以上內容可以看出MySQL查詢執行過程包括6個方面的內容,這6個方向缺一不可,當然在MySQL數據庫中,SQL語言提供了SELECT語句進行數據庫的查詢,該語句具有靈活的使用方式和豐富的功能。


免責聲明!

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



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