1. 程式人生 > 資料庫 >Mysql學習筆記01

Mysql學習筆記01

MySQL基礎架構

MySQL分為Server層和儲存引擎層。
Server層包括聯結器、查詢快取、分析器、優化器、執行器等。
儲存引擎層負責資料的儲存和提取,支援多種儲存引擎。
Server:
聯結器:負責與客戶端建立連線,獲取許可權。
許可權:登入成功的同時會獲得許可權,意味著如果使用者登入之後對該使用者修改許可權,新建連線才會使用新許可權,對當前正在使用的使用者連線無效。
連線:連線預設斷開時間為8小時,由於建立連線比較複雜,建議減少建立連線的動作,儘量使用長連線。
長連線的缺點:MySQL再執行過程中臨時記憶體是管理再記憶體物件中的,資源只有當連線結束才會釋放,長期累積佔用記憶體。建議定期斷開長連線或在執行大操作之後執行mysql_reset_connection初始化連線。

查詢快取:快取查詢結果,命中直接返回。
執行過的語句以及結果會以key-value儲存在記憶體中,失效頻繁所以不建議使用。靜態、配置表可以使用,可以通過query_cache_type設定成按需使用,8.0版本整個模組刪除。

分析器:詞法分析,語法分析。
詞法分析:分析語句中每個詞所對應的含義,識別出關鍵字,欄位,表名等。
語法分析:分析SQL是否滿足語法,

優化器:優化處理,選擇索引、表連線順序等。

執行器:校驗許可權,呼叫引擎介面執行
呼叫引擎介面
無索引情況下:呼叫引擎介面取第一條資料判斷是否滿足,滿足存至結果集;呼叫引擎介面取下一行,重複判斷到最後一行;將結果集返回客戶端。
有索引情況下

:呼叫引擎介面取滿足條件的第一行,迴圈再取滿足條件下的下一行。
rows_examined:表示語句執行過程中掃描了多少行,指的是執行器每次呼叫引擎介面獲取資料行的累加。有些情況下執行器呼叫一次,再引擎內部掃描多行,這種情況下引擎掃描行數和rows_examined並不完全相同。

在這裡插入圖片描述

問題:

  1. 如果表T中沒有K欄位,而當執行select * from T where k = 1,會報不存在欄位的錯誤,是在哪個階段報出來的?

        分析器階段。

  1. 為何執行許可權校驗不在優化器之前做?

        有些時候,SQL語句要操作的表不只是SQL顯式指定的那些。比如有個觸發器,就只有在執行器階段才能確定。