基于Mysql5.7版本的explain參數詳解…
mysql官網相關參數解讀
一:id SELECT辨別符
1.id越大越先執行
2.相同id,從從往下執行
二:select_type
1.SIMPLE :最簡單的查詢(沒有關聯查詢沒有子查詢沒有union的查詢語句)
2:PRIMARY:子查詢最外層的查詢語句
3.SUBQUERY:子查詢内層查詢語句
4.DERIVED:派生表查詢, FROM後的不是表而是查詢後的結果集
5.UNION:union或union all中的第二個以後的查詢表
6.UNION RESULT:union後的結果集
三: table 輸出行所引用的表的名稱
<unionM,N>:指id值為M和N的行的并集。
<derived N:該行引用id值為N的行的派生表結果。
<subquery N:該行是指該行的物化子查詢的結果,其id 值為N
四:partitions 分區
查詢将從中比對記錄的分區。對于未分區的表,該值為NULL。
五:type: the join type 關聯類型
ordered from the best type to the worst 從最優到最劣
1.system: 該表為系統表而且隻有一行。這是const聯接類型的特例 。
2.const: 在PRIMARY KEY或 UNIQUE index的所有部分與常量值進行比較時使用
3.eq_ref:關聯的被驅動表的字段時主鍵索引或者唯一索引
4.ref:對于先前表中的每個行組合,将從該表中讀取具有比對索引值的所有行。ref如果聯接僅使用鍵的最左字首,或者如果鍵不是aPRIMARY KEY或 UNIQUE索引(換句話說,如果聯接無法基于鍵值選擇單個行),則使用。如果使用的鍵僅比對幾行,則這是一種很好的聯接類型。
5.range:使用索引選擇行,僅檢索給定範圍内的行
6.index:查詢覆寫索引的所有資料
7.all:全表掃描
六:possible_keys:可能用到的索引
七:key 該key列訓示MySQL實際決定使用的索引
注意:possible_keys 為null,key可能會用到索引
雖然不滿足聯合索引的最左比對原則,但是用到了覆寫索引,還是走了聯合索引樹
八:key_len 索引的長度
九:ref 該ref列顯示将哪些列或常量與該key列中命名的索引進行比較,以從表中選擇行
十:rows 預計需要掃描的行數,不是一個精确的值
十一:filtered 表示按表條件過濾的表行的估計百分比。最大值為100,這表示未過濾行。值從100減小表示過濾量增加。 rows顯示了檢查的估計行數,rows× filtered顯示了與下表連接配接的行數。例如,如果 rows為1000且 filtered為50.00(50%),則與下表連接配接的行數為1000×50%= 500。
十二:extra 有關MySQL如何解析查詢的其他資訊
1.Using where: using where 意味着mysql伺服器将在存儲引擎檢索行後再進行過濾。
2.Using index: 表示Mysql将使用覆寫索引,以避免回表;
3.Using index condition: 全稱Using index condition pushdown ICP 索引下推
ICP:MySQL伺服器将這一部分判斷條件傳遞給存儲引擎,然後由存儲引擎通過判斷索引是否符合MySQL伺服器傳遞的條件,隻有當索引符合條件時才會将資料檢索出來傳回給MySQL伺服器 。
4.Using filesort 用到的索引不是排序字段
5.Using temporary 用到了臨時表。如果查詢包含GROUP BY和 ORDER BY子句以不同的方式列出列,通常會發生這種情況。
6.Using join buffer:關聯表沒有用到索引,需要連接配接緩沖區來存儲中間結果。需要添加索引來優化