某次組會分享的內容:mysql查詢語句的底層執行mysql
鏈接器接收到客戶端的鏈接請求響應主要包括5個步驟:算法
MySQL 從你輸入的"select"這個關鍵字識別出來,這是一個查詢語句。它也要把字符串「T」識別成「表名 T」,把字符串「ID」識別成「列 ID」。作完了這些識別之後,就要作「語法分析」。根據詞法分析的結果,語法分析器會根據語法規則,判斷你輸入的這個 SQL 語句是否知足 MySQL 語法。sql
其中,邏輯查詢優化將生成邏輯查詢執行計劃。根據關係代數的原理,把語法分析樹變爲關係代數語法樹的樣式,原先SQL語義中的一些謂詞變化爲邏輯代數的操做符等樣式
這些樣式是一個臨時的中間狀態,通過進一步的邏輯查詢優化,如執行常量傳遞、選擇下推等(如一些節點下移,一些節點上移),從而生成邏輯查詢執行計劃。數據庫
物理查詢優化除了進行表的鏈接順序調整外,還會使用代價估算模型對單個表的掃描方式、兩錶鏈接的鏈接算法進行評估,選擇每一項操做中代價最小的操做爲下一步優化的基礎。物理查詢優化的最終結果是生成最終物理查詢執行計劃。緩存
mysql的存儲引擎 是按照插件的形式,提供一個接口給server層去用,這樣的一個好處是,在執行器調用引擎接口的時候,咱們能夠動態的擴展數據庫存儲引擎或者是動態組合存儲引擎,可擴展性比較高。優化
若是中途沒有update或者insert操做,是第二次查詢的話,會直接去緩存區讀取這個結果。避免了磁盤IO,大大提升了數據庫處理查詢的能力。插件
可是若是中途有update或者insert操做。在一個表上有更新的時候,跟這個表有關的查詢緩存會失效,若是是寫多讀少的應用場景的話,效率比較慢。這也就是咱們通常不建議使用查詢緩存的緣由命令行
query_cache_type=0時表示關閉,1時表示打開,2表示只要select中明確指定SQL_CACHE才緩存。3d
查看緩存運行狀態 :好比你想執行某個查詢以前,你能夠查看緩存運行狀態cdn