MySQL一條查詢語句是如何執行的

MySQL的基本架構大致能夠分爲server層和存儲引擎層,邏輯架構圖以下:sql

Server層除了圖中顯示的,還包括全部的內置函數(包括日期、時間、數學和加密函數等),存儲過程、觸發器、視圖等跨存儲引擎的功能都在這層實現。數據庫

存儲引擎層負責數據的存儲和提取,支持InnoDB、MyISAM、Memory等,從MySQL 5.5.5版本開始InnoDB成爲默認的存儲引擎。緩存

  1. 鏈接器架構

    鏈接器負責跟客戶端創建鏈接、獲取權限、維持和管理鏈接。數據庫裏面的鏈接分爲長鏈接和端鏈接,和tcp的鏈接相似。長鏈接過多會佔用內存太大,從而出現OOM。能夠考慮按期斷開長鏈接,尤爲是執行過一個佔用內存的大查詢;5.7版本之後能夠執行 myssql_reset_connection來從新初始化鏈接資源。tcp

  2. 查詢緩存函數

    執行查詢語句時,若是以前執行過那麼語句和結果可能會以key(語句)-value(結果)直接緩存在內存中。優化

    不建議使用查詢緩存,由於只要有一個表更新,那麼這張表上全部查詢緩存都會被清空。8.0版本後刪除了此功能。加密

  3. 分析器spa

    分析器對SQL語句作解析,先作詞法分析,例如‘「select」-->查詢語句;再作語法分析。server

  4. 優化器

    表裏多個索引決定用哪一個或者關聯查詢時決定表的鏈接順序

  5. 執行器

    • 先判斷用戶對錶T有沒有執行權限,沒有則返回錯誤
    • 有就調用指定引擎提供的接口,一行一行遍歷表,將全部知足條件的行組成的記錄集做爲結果返回給客戶端

   - - MySQL實戰45講筆記一

相關文章
相關標籤/搜索