mysql學習(二) sql執行流程

2021-10-07 20:29:53 字數 1353 閱讀 6749

上篇文章對mysql的基本架構和儲存引擎有了簡單的認識,今天我們需要對sql的執行流程有個簡單的認識,通過這篇文章,我們可以詳細的了解並知道一條sql在mysql中是如何執行下來的。

大體來說,mysql主要分為server層和儲存資料層(儲存引擎層):

server層包括聯結器、查詢快取、分析器、優化器、執行器等,mysql的主要核心功能和所有的內建函式都被其涵蓋其中,所有的跨儲存引擎也是在這一層實現,比如觸發器、儲存過程、檢視等等。

而儲存資料層(儲存引擎層)負責資料的儲存和提取,由於是可插拔式的,支援innodb、myisam、memory等多種儲存引擎,由於儲存引擎是表級別的,並且mysql 5.5以後預設的儲存引擎是innodb,如果建立表時,沒有宣告儲存引擎,那麼就會預設為innodb儲存引擎。

mysql執行流程如上圖所示,主要的流程為:

第一步,客戶端通過聯結器來對當前使用者的許可權進行認證,如果認證成功,就會連線上mysql伺服器;

第二步,連線建立完成後,那麼當你執行select語句時,就會先查詢快取,看之前是否執行過當前這條語句,如果執行過,那麼就會直接返回查詢結果,否則,就會進入下一步。(但是我們大多數情況下是建議不使用快取的,因為做更新插入等操作時,快取就會清空,而大多數我們對錶做更新操作會很頻繁,除非我們的業務是對當前表只進行查詢操作,那麼就可以使用快取);

第三步,如果查詢快取沒有命中,那麼sql就會進入到分析器當中了,解析器會將完整的sql做詞法分析,將乙個完成的sql切割成乙個個的字串,然後進行關鍵字識別,做完了關鍵字識別後,就要進行語法分析,語法分析器就會根據語法規則做語法檢查,判斷當前sql是否滿足mysql語法,如果語法正確,那麼就會根據mysql定義的語法規則,根據sql語句生成乙個資料結構,這個資料結構我們叫做解析樹,然後再經過預處理器檢查解析樹是否合法,在這一步mysql會校驗使用者是否有表的操作許可權,預處理之後會得到乙個新的樹。

第四步,經過解析器和預處理器之後,我們得到了乙個解析樹,在開始執行sql前,還要經過優化器的處理,查詢優化器的作用就是根據解析樹生成不同的執行計畫,然後選擇一種優的執行計畫,mysql 裡 面使用的是基於成本模型的優化器,哪種執行計畫執行時成本小就用哪種。而且它是io_cost和 cpu_cost的開銷總和,它通常也是我們評價乙個查詢的執行效率的乙個常用指標。

第五步,mysql 通過分析器知道了你要做什麼,通過優化器知道了該怎麼做,得到了乙個查詢計畫。於是就進 入了執行器階段,開始執行語句。開始執行的時候,先判斷你對這個表是否有執行的許可權,如果有許可權,就使用指定的儲存引擎開啟表開始查詢。執行器會根據表的引擎定義,去使用這 個引擎提供的查詢介面,提取資料,之後呈現給客戶端,至此,sql的整個執行流程就全部完畢。

mysql使用者SQL執行流程

對於dba來說,知道資料庫內部對使用者程序的處理流程是非常重要的,mysql跟oracle都屬於關係型資料庫,在處理使用者的程序方面有著相似之處 這裡我們只討論mysql 第一 連線階段 1 使用者發起sql程序,監聽客戶端的 連線管理模組 在3306埠接收客戶的sql請求 2 將請求 到 連線進 ...

MySQL架構與SQL執行流程

mysql架構設計 下面是一張mysql的架構圖 上方各個元件的含義如下 connectors 指的是不同語言中與sql的互動 management serveices utilities 系統管理和控制工具 connection pool 連線池 管理緩衝使用者連線,執行緒處理等需要快取的需求。負...

SQL執行流程

mysql的查詢流程 1 查詢快取 server如果在查詢快取中發現了這條sql語句,就會直接將結果返回給客戶端 如果沒有,就進入到解析器階段。需要說明的是,因為查詢快取往往效率不高,所以在mysql8.0以後就拋棄了這個功能 兩個sql需要完全一樣,包括空格 注釋 大小寫都必須一樣 2 解析器 在...