MySQL查詢過程
explain執行計劃包含的信息
id解釋
select查詢的序列號,包含一組數字,表示查詢中執行select自句或執行表的順序,MySQL Query Optimizer 選定的執行計劃中查詢的序列號。表示查詢中執行 select 子句或操作表的順序,id 值越大優先級越高,越先被執行。id 相同,執行順序由上至下。
- id相同
id相同執行順序由上到下,執行順序先是t1表,然後是t3表,接下來是t2表
- id不同
如果是子查詢,id的序號會遞增,id值越大,優先級越高,越先被執行,上圖中的SUBQUERY就是子查詢
- id相同又不同
id如果相同,可以認為是一組,從上往下順序執行,在所有組中id值越大,優先級越高,越先執行
總結:MySQL中sql語句最終的執行順序是要通過id值來判斷,而不是按照我們所寫的SQL語句的順序執行,MySQL會調用它自己的查詢優化器,來執行它認為效率最高的順序執行,所以explain執行結果分析能夠清晰的告訴我們SQL的執行順序。
select_type解釋
解釋:查詢的類型,主要用於區別普通查詢,聯合查詢,子查詢等複雜查詢。
- simple
解釋:MySQL中簡單的select查詢,查詢中不包含子查詢或者UNION
- primary
解釋:查詢中若包含任何複雜的字部分,最外層查詢被標記為
- subquery
解釋:在select或where列表中包含子查詢
- derived
解釋:在from列表中包含子查詢被標記為DERIVED(衍生),MySQL會遞歸查詢這些子查詢,把結果放在臨時表中
- union
解釋:若第二個select出現在union後,則會標記為union,若union包含在from字句的查詢中,外層select將會標記為DERIVND
- union result
解釋:從union表中獲取結果的select