1. 程式人生 > 其它 >MySQL一條SQL語句的執行過程

MySQL一條SQL語句的執行過程

簡而言之

一條SQL語句 select * from student T where T.id = 5;

MYSQL分為2部分,一個是server層,一個是儲存引擎層,server主要處理SQL語句,儲存引擎才是儲存資料的地方。

1.首先會分析語句指向所在的資料庫,檢查當前的使用者名稱密碼許可權是否匹配,如果匹配就會開啟與MYSQL的連結,不匹配會報錯"Access denied for user"

2.(MYSQL8.0版本以上已取消)然後會去查詢server層的快取,檢視之前是否執行過這條語句,如果執行過會以鍵值對key-value形式,key儲存查詢語句,value儲存返回結果返回,且不會執行後面的複雜操作,如果沒有命中快取,會繼續執行後面的操作,並在執行完成後存入快取。(查詢快取基本是弊大於利,因為只要更新表,就會從新清空快取再重新存,除非這張表基本不怎麼變動,查詢快取的效率才比較高)

3.然後到server層的分析器,分析器會對SQL語句進行解析,因為SQL是由字串和空格組成,所以會先識別空格之間的字串是什麼,代表什麼,並先將student表命名為T,然後會去對語句做語法分析,判斷SQL語句是否滿足語法規則,如果不滿足會報錯“You have an error in your SQL syntax

4.經過了分析器後到server優化器,在執行前MYSQL會對語句進行自動優化處理,比如有很多索引時候選擇哪一個更好,一張表連線多張表時先取出哪一邊的值再判斷,這些執行結果都是一樣的,但是執行效率不同,優化器的作用就是決定選擇哪一種方案

5.最後進入到server的執行器,執行時先判斷使用者對這個查詢的表有沒有許可權,然後執行語句會去呼叫儲存引擎中的引擎介面(InnoDB || MyIsam),然後逐漸遍歷表,一行一行的找到,直到滿足條件 T.id = 5 的一行,然後把這一行放到結果集裡,繼續往下找,直到整張表遍歷完成,然後把結果集返回給客戶端。