mysql執(zhí)行流程

image.png

server層

包括 連接器,查詢緩存,分析器,優(yōu)化器,執(zhí)行器等,所有內置函數(shù),所有跨存儲引擎的功能(存儲過程,視圖,觸發(fā)器)

連接器

負責跟客戶端建立連接,維持連接,管理連接,獲取權限。
命令:

mysql -hip -Pport -u$user -p
命令執(zhí)行流程:

  1. 創(chuàng)建tcp連接
  2. 輸入用戶名密碼(密碼也可以直接跟在-p后面,不推薦)
  3. 認證不通過執(zhí)行結束;通過則讀取用戶權限(從權限表查詢,后續(xù)該連接的權限判斷都依賴此時讀取的權限。即使權限被修改,對此連接來說,不會生效,需要重新建立連接才能使用新的權限)
  4. 連接超時后會自動斷開由參數(shù)wait_timeout控制默認8小時
  5. 數(shù)據(jù)庫一般使用長連接,SQL在執(zhí)行過程中臨時使用的內存是管理在連接對象里面的。這些資源會在連接斷開的時候才釋放,所以長連接可能會出現(xiàn)oom
    可以定時斷開連接。進行大內存大查詢后斷開連接。
    MySQL 5.7或更新版本,可以在每次執(zhí)行一個比較大的操作后,通過執(zhí)行
    mysql_reset_connection來重新初始化連接資源。這個過程不需要重連和重新做權限驗證,
    但是會將連接恢復到剛剛創(chuàng)建完時的狀態(tài)

查詢緩存

  1. 上次查詢執(zhí)行后會將sql語句和查詢結果以k-v的形式存在緩存中,每次表更新會清除緩存。
  2. 適用于不常更新的表使用??梢燥@式指定使用緩存

mysql> select SQL_CACHE * from T where ID=10;

  1. MySQL 8.0版本直接將查詢緩存的整塊功能刪掉

分析器

分析是否滿足sql語法,不滿足則報錯并提示首次出現(xiàn)錯誤的地方。

優(yōu)化器

從多個可選的執(zhí)行方案中選擇最優(yōu)的執(zhí)行方案

執(zhí)行器

  1. 校驗對表是否有權限
  2. 如果有,繼續(xù)執(zhí)行,操作引擎,返回結果

存儲引擎

負責存取數(shù)據(jù),插件式的架構,支持innodb(5.5之后默認的),myisam,memory等;建表時可以通過engine=memory指定。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容