對於dba來說,知道資料庫內部對使用者程序的處理流程是非常重要的,mysql跟oracle都屬於關係型資料庫,在處理使用者的程序方面有著相似之處:
這裡我們只討論mysql:
第一、連線階段:
1、使用者發起sql程序,監聽客戶端的『連線管理模組』在3306埠接收客戶的sql請求;
2、將請求**到『連線進/執行緒模組』;
3、呼叫『使用者模組』來進行授權檢查;
4、通過檢查後,『連線進/執行緒模組』從『執行緒連線池』中取出空閒的被快取的連線線程和客戶端請求對接,如果失敗則建立乙個新的連線請求;
第二、執行階段:
1、先查詢快取,檢查query語句是否完全匹配,接著再檢查是否具有許可權,都成功則直接取資料返回;
2、上一步有失敗則轉交給『命令解析器』,經過詞法分析,物件許可權檢查、語法分析後生成解析樹;
3、接下來是預處理階段,處理解析器無法解決的語義,檢查許可權等,生成新的解析樹;
4、再轉交給對應的模組處理;
5、如果是select查詢還會經由『查詢優化器』做大量的優化,生成執行計畫;
6、檢查資料是否在記憶體裡,如果是直接從記憶體裡讀取、修改,如果否,獲取表的儲存引擎型別等資訊,通過介面呼叫對應的儲存引擎處理;
7、上述過程中產生資料變化的時候,若開啟日誌功能,則會記錄到相應二進位制日誌檔案中; 第
三、返回階段:
1、query請求完成後,將結果集返回給『連線進/執行緒模組』;返回的也可以是相應的狀態標識,如成功或失敗等;
2、連線進/執行緒模組』進行後續的清理工作,並繼續等待請求或斷開與客戶端的連線;
mysql學習(二) sql執行流程
上篇文章對mysql的基本架構和儲存引擎有了簡單的認識,今天我們需要對sql的執行流程有個簡單的認識,通過這篇文章,我們可以詳細的了解並知道一條sql在mysql中是如何執行下來的。大體來說,mysql主要分為server層和儲存資料層 儲存引擎層 server層包括聯結器 查詢快取 分析器 優化器...
MySQL架構與SQL執行流程
mysql架構設計 下面是一張mysql的架構圖 上方各個元件的含義如下 connectors 指的是不同語言中與sql的互動 management serveices utilities 系統管理和控制工具 connection pool 連線池 管理緩衝使用者連線,執行緒處理等需要快取的需求。負...
SQL執行流程
mysql的查詢流程 1 查詢快取 server如果在查詢快取中發現了這條sql語句,就會直接將結果返回給客戶端 如果沒有,就進入到解析器階段。需要說明的是,因為查詢快取往往效率不高,所以在mysql8.0以後就拋棄了這個功能 兩個sql需要完全一樣,包括空格 注釋 大小寫都必須一樣 2 解析器 在...