MySQL中SQL語句explain執行分析診斷第一篇

MySQL查詢過程

MySQL中SQL語句explain執行分析診斷第一篇

  • 客戶端發送一條查詢給服務器。
  • 服務器先檢查查詢緩存,如果命中了緩存,則立刻返回存儲在緩存中的結果。否則進入下一階段。
  • 服務器端進行SQL解析、預處理,再由優化器生成對應的執行計劃。
  • MySQL根據優化器生成的執行計劃,調用存儲引擎的API來執行查詢。
  • 將結果返回給客戶端。

  • explain執行計劃包含的信息

    MySQL中SQL語句explain執行分析診斷第一篇

    id解釋

    select查詢的序列號,包含一組數字,表示查詢中執行select自句或執行表的順序,MySQL Query Optimizer 選定的執行計劃中查詢的序列號。表示查詢中執行 select 子句或操作表的順序,id 值越大優先級越高,越先被執行。id 相同,執行順序由上至下。


    1. id相同
    MySQL中SQL語句explain執行分析診斷第一篇

    id相同執行順序由上到下,執行順序先是t1表,然後是t3表,接下來是t2表


    1. id不同
    MySQL中SQL語句explain執行分析診斷第一篇

    如果是子查詢,id的序號會遞增,id值越大,優先級越高,越先被執行,上圖中的SUBQUERY就是子查詢


    1. id相同又不同
    MySQL中SQL語句explain執行分析診斷第一篇

    id如果相同,可以認為是一組,從上往下順序執行,在所有組中id值越大,優先級越高,越先執行


    總結:MySQL中sql語句最終的執行順序是要通過id值來判斷,而不是按照我們所寫的SQL語句的順序執行,MySQL會調用它自己的查詢優化器,來執行它認為效率最高的順序執行,所以explain執行結果分析能夠清晰的告訴我們SQL的執行順序。


    select_type解釋

    MySQL中SQL語句explain執行分析診斷第一篇


    解釋:查詢的類型,主要用於區別普通查詢,聯合查詢,子查詢等複雜查詢。


    1. simple
    MySQL中SQL語句explain執行分析診斷第一篇

    解釋:MySQL中簡單的select查詢,查詢中不包含子查詢或者UNION

    1. primary

    解釋:查詢中若包含任何複雜的字部分,最外層查詢被標記為

    1. subquery

    解釋:在select或where列表中包含子查詢

    1. derived

    解釋:在from列表中包含子查詢被標記為DERIVED(衍生),MySQL會遞歸查詢這些子查詢,把結果放在臨時表中

    1. union

    解釋:若第二個select出現在union後,則會標記為union,若union包含在from字句的查詢中,外層select將會標記為DERIVND

    1. union result

    解釋:從union表中獲取結果的select

    MySQL中SQL語句explain執行分析診斷第一篇


    點擊關注發私信或評論交流文章中有問題的地方,相互學習和答疑


    分享到:


    相關文章: