mysql 執行過程 MySQL的執行流程分析

2021-10-17 11:37:27 字數 1718 閱讀 1042

mysql的執行流程

那麼,要知道我們平時常說的優化sql到底是在優化些什麼,就必須弄懂mysql的執行流程。而這個專題將系統化的由淺到深講解mysql一些高階用法。打算先講很多人關注的使用方式(增刪改查以及其優化),然後就講資料庫和表的操作(很多我們學習忽略的地方),接著就是引擎還有更高階的查詢等等。

先簡單粗暴上一執行流程圖感受下

大致可以分為以下十個步驟:

1.當我們請求mysql伺服器的時候,mysql前端會有乙個監聽,請求到了之後,伺服器得到相關的sql語句,執行之前(虛線部分為執行),還會做許可權的判斷

2.通過許可權之後,sql就到mysql內部,他會在查詢快取中,看該sql有沒有執行過,如果有查詢過,則把快取結果返回,說明在mysql內部,也有乙個查詢快取.但是這個查詢快取,預設是不開啟的,這個查詢快取,和我們的hibernate,mybatis的查詢快取是一樣的,因為查詢快取要求sql和引數都要一樣,所以這個命中率是非常低的(沒什麼卵用的意思)。

3.如果我們沒有開啟查詢快取,或者快取中沒有找到對應的結果,那麼就到了解析器,解析器主要對sql語法進行解析

4.解析結束後就變成一顆解析樹,這個解析樹其實在hibernate裡面也是有的,大家回憶一下,在以前做過hibernate專案的時候,是不是有個乙個antlr.jar。這個就是專門做語法解析的工具.因為在hibernate裡面有hql,它就是通過這個工具轉換成sql的,我們程式語言之所以有很多規範、語法,其實就是為了便於這個解析器解析,這個學過編譯原理的應該知道.

5.得到解析樹之後,不能馬上執行,這還需要對這棵樹進行預處理,也就是說,這棵樹,我沒有經過任何優化的樹,預處理器會這這棵樹進行一些預處理,比如常量放在什麼地方,如果有計算的東西,把計算的結果算出來等等...

6.預處理完畢之後,此時得到一棵比較規範的樹,這棵樹就是要拿去馬上做執行的樹,比起之前的那棵樹,這棵得到了一些優化

7.查詢優化器,是mysql裡面最關鍵的東西,我們寫任何一條sql,比如select * from user where username = toby and password = 1,它會怎麼去執行?它是先執行username = toby還是password = 1?每一條sql的執行順序查詢優化器就是根據mysql對資料統計表的一些資訊,比如索引,比如表一共有多少資料,mysql都是有快取起來的,在真正執行sql之前,他會根據自己的這些資料,進行乙個綜合的判定,判斷這一次在多種執行方式裡面,到底選哪一種執行方式,可能執行的最快.這一步是mysql效能中,最關鍵的核心點,也是我們的優化原則.我們平時所講的優化sql,其實說白了,就是想讓查詢優化器,按照我們的想法,幫我們選擇最優的執行方案,因為我們比mysql更懂我們的資料.mysql看資料,僅僅只是自己收集到的資訊,這些資訊可能是不準確的,mysql根據這些資訊選了乙個它自認為最優的方案,但是這個方案可能和我們想象的不一樣.

8.這裡的查詢執行計畫,也就是mysql查詢中的執行計畫,比如要先執行username = toby還是password = 1

9.這個執行計畫會傳給查詢執行引擎,執行引擎選擇儲存引擎來執行這乙份傳過來的計畫,到磁碟中的檔案中去查詢,這個時候重點來了,影響這個查詢效能最根本的原因是什麼?就是硬碟的機械運動,也就是我們平時熟悉的io,所以一條查詢語句是快還是慢,就是根據這個時間的io來確定的.那怎麼執行io又是什麼來確定的?就是傳過來的這乙份執行計畫.

10.如果開了查詢快取,則返回結果給客戶端,並且查詢快取也放乙份。

MYSQL執行過程

一條查詢語句執行過程 1.先確定 鏈結方式 分為 同步 和 非同步 一般是同步 2.鏈結方式 分為 長鏈結 和 短鏈結 長鏈結是操作後不會馬上關掉會保持一段時間 短鏈結操作後會馬上關掉。長連線mysql會保持28800秒 8小時 這個時間可以改 mysql 預設最大鏈結數量151個 修改最大鏈結數量...

mysql 語句執行的過程

實際上mysql執行的每一步都比較複雜,具體的過程如下 1 mysql客戶端和伺服器通訊 mysql客戶端和伺服器之間的通訊協議是 半雙工 的,這意味著,在任何乙個時刻,要麼由伺服器向客戶端傳送資料,要麼由客戶端向伺服器傳送資料,這兩個動作不能同時發生。這種協議讓mysql通訊簡單快速,但也限制了m...

mysql查詢過程 MySQL查詢執行過程

mysql查詢執行路徑 1.客戶端傳送一條查詢給伺服器 2.伺服器先會檢查查詢快取,如果命中了快取,則立即返回儲存在快取中的結果。否則進入下一階段 3.伺服器端進行sql解析 預處理,再由優化器生成對應的執行計畫 4.mysql根據優化器生成的執行計畫,呼叫儲存引擎的api來執行查詢 5.將結果返回...