查詢
mysql執行一條sql查詢語句背後發生了什麼呢?
我是李福春,我在準備面試,今天的題目是:
mysql的體系結構是怎樣的?一條sql語句在mysql的體系結構中經曆了什麼?
答:
mysql體系結構
mysql的題解結構可以分成3個部分。列舉如下:
mysql-client: 比如一個指令行,或者使用java的JDBC發送sql語句
mysql-server: 分為5個部分
連接配接器 (管理連接配接權限認證) 查詢緩存 (命中則緩存起來) 分析器 (詞法 文法分析) 優化器 (執行計劃生成,索引選擇) 執行器 (操作,傳回結果)
mysql-存儲引擎: 負責存儲資料,提供讀寫接口(建表的時候指定MyISAM,InnoDB , Memory)
一條sql語句的執行過程
一條sql語句在mysql體系中的流轉過程:
1,連接配接器: 首先打開指令行,指令:mysql -h${ip} -P${port} -u${user} -p ,輸入密碼。 使用連接配接器連接配接服務端; 連接配接成功之後,權限修改不會影響目前連接配接,連接配接的有效期預設是8個小時; 連接配接之後,執行過程中使用記憶體會持續增加,應該定時重置連接配接狀态,防止oom;
2,查詢緩存:如果查詢比較頻繁,按照key,value的方式放入緩存,命中緩存則直接傳回; 如果更新比較頻繁,建議不要使用查詢緩存,query_cache_type=demand ,然後如果需要,可以在select後面帶上 SQL_CACHE ; mysql8.0之後移除了查詢緩存;
3,分析器:解析文法和詞法,如果文法錯誤,會直接給出提示;
4,優化器:比如join語句執行方法的邏輯,如何選擇索引等;
5, 執行器:核對執行權限,調用存儲引擎的接口,按照文法循環執行,傳回結果集。 可以觀察 row_examined ,引擎掃描行數。
小結
本節介紹了mysql的體系結構。
然後跟蹤了一條查詢sql在體系結構中流轉過程。
腦圖小結
原創不易,轉載請注明出處,讓我們互通有無,共同進步,歡迎多溝通交流。