4 4 查詢執行的基礎

2022-08-01 05:12:08 字數 1036 閱讀 7935

mysql執行乙個查詢的過程,可以用下圖表示:

我們可以看到當向mysql傳送乙個請求的時候,mysql究竟做了什麼:

1、客戶端傳送一條查詢給伺服器。

2、伺服器先檢查查詢快取,如果命中了快取,則立刻返回儲存在快取中的結果。否則進入下乙個階段。

3、伺服器端進行sql解析、預處理,再由優化器生成對應的執行計畫。

4、mysql根據優化器生成的執行計畫,呼叫儲存引擎的api來執行查詢。

5、將結果返回給客戶端。

4.4.1 mysql客戶端/伺服器通訊協議

mysql客戶端和伺服器之間的通訊協議是「半雙工」的,這意味著,在任何乙個時刻,要麼是由伺服器向客戶端傳送資料,要麼是由客戶端向伺服器傳送資料,這兩個動作不能同時發生。

4.4.2 查詢快取

在解析乙個查詢語句之前,如果查詢快取是開啟的,俺麼mysql會優先檢查這個查詢是否命中查詢快取中的資料。這個檢查是通過乙個對大小寫敏感的雜湊查詢實現的。查詢和快取中的查詢即使只有乙個位元組不同,那也不會匹配快取結果,這種情況下查詢就會進入下乙個階段的處理。

4.4.3 查詢優化處理

查詢的生命週期的下一步是將乙個sql轉換成乙個執行計畫,mysql再依照這個執行計畫和儲存引擎之間進行互動。這包括多個子階段:解析sql、預處理、優化sql執行計畫這個過程中的任何錯誤都可能終止查詢。

4.4.4 查詢執行引擎

在解析和優化階段,mysql將生成查詢對應的執行計畫,mysql的查詢執行引擎則根據這個執行計畫來完成整個查詢。

4.4.5 返回結果給客戶端

查詢執行的最後乙個階段是將結果返回給客戶端。即使查詢不需要返回結果集給客戶端,mysql仍然會返回這個查詢的一些資訊,如該查詢影響到的行數。如果查詢可以被快取,那麼mysql在這個階段也會將結果存放到查詢快取中。

查詢執行的基礎

mysql的一般查詢流程如下 mysql客戶但和伺服器中間的通訊協議時 半雙工 的。因此當查詢語句較長時引數 max allowed packet 很重要。都是從資料庫中的快取獲取資料。可以通過對mysql的介面,進行設定取消緩衝。mysql的查詢狀態 show full processlist進行...

MySQL查詢執行的基礎

當希望mysql能夠以更高的效能執行查詢時,最好的辦法就是弄清楚mysql是如何優化和執行查詢的。一旦理解這一點,很多查詢優化實際上就是遵循一些原則讓優化器能夠按照預想的合理的方式執行。換句話說,是時候回頭看看我們之前討論的內容了 mysql執行乙個查詢的過程。當向mysql傳送乙個請求的時候,my...

MySQL查詢執行的基礎 查詢優化處理

查詢的生命週期的下一步是將乙個sql轉換成乙個可執行計畫,mysql再按照這個計畫和儲存引擎進行互動 預處理器則會根據一些mysql規則進一步檢查解析樹是否合法。它會檢查資料表和資料列是否存在,還會解析名字和別名,看看它們是否存在歧義。當語法樹被認為是合法的時候,將轉由優化器去轉化成執行計畫。一條查...