更新時間:2021-01-13 17:01:07 來源:動力節點 瀏覽1303次
查詢是用戶通過設置某些查詢條件,從表或其他查詢中選取全部或者部分數據,以表的形式顯示數據供用戶瀏覽。查詢是一個獨立的、功能強大的、具有計算功能和條件檢索功能的數據庫對象。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語句進行數據庫的查詢,該語句具有靈活的使用方式和豐富的功能。MySQL數據庫中,各種各樣的查詢語句也是十分重要的考點,小伙伴們可以在本站的MySQL教程中找到許多面試題,在學習的同時還能隨時檢驗自己的能力,何樂而不為!
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習