天天看點

mysql explain參數詳解

基于Mysql5.7版本的explain參數詳解…

mysql explain參數詳解

mysql官網相關參數解讀

mysql explain參數詳解

一:id SELECT辨別符

1.id越大越先執行

2.相同id,從從往下執行

二:select_type

1.SIMPLE :最簡單的查詢(沒有關聯查詢沒有子查詢沒有union的查詢語句)

mysql explain參數詳解

2:PRIMARY:子查詢最外層的查詢語句

3.SUBQUERY:子查詢内層查詢語句

mysql explain參數詳解

4.DERIVED:派生表查詢, FROM後的不是表而是查詢後的結果集

5.UNION:union或union all中的第二個以後的查詢表

6.UNION RESULT:union後的結果集

mysql explain參數詳解

三: table 輸出行所引用的表的名稱

<unionM,N>:指id值為M和N的行的并集。

<derived N:該行引用id值為N的行的派生表結果。

<subquery N:該行是指該行的物化子查詢的結果,其id 值為N

mysql explain參數詳解

四:partitions 分區

查詢将從中比對記錄的分區。對于未分區的表,該值為NULL。

五:type: the join type 關聯類型

ordered from the best type to the worst 從最優到最劣

1.system: 該表為系統表而且隻有一行。這是const聯接類型的特例 。

2.const: 在PRIMARY KEY或 UNIQUE index的所有部分與常量值進行比較時使用

mysql explain參數詳解

3.eq_ref:關聯的被驅動表的字段時主鍵索引或者唯一索引

mysql explain參數詳解

4.ref:對于先前表中的每個行組合,将從該表中讀取具有比對索引值的所有行。ref如果聯接僅使用鍵的最左字首,或者如果鍵不是aPRIMARY KEY或 UNIQUE索引(換句話說,如果聯接無法基于鍵值選擇單個行),則使用。如果使用的鍵僅比對幾行,則這是一種很好的聯接類型。

mysql explain參數詳解

5.range:使用索引選擇行,僅檢索給定範圍内的行

mysql explain參數詳解

6.index:查詢覆寫索引的所有資料

mysql explain參數詳解

7.all:全表掃描

mysql explain參數詳解

六:possible_keys:可能用到的索引

七:key 該key列訓示MySQL實際決定使用的索引

注意:possible_keys 為null,key可能會用到索引

mysql explain參數詳解

雖然不滿足聯合索引的最左比對原則,但是用到了覆寫索引,還是走了聯合索引樹

八: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伺服器 。

mysql explain參數詳解

4.Using filesort 用到的索引不是排序字段

mysql explain參數詳解

5.Using temporary 用到了臨時表。如果查詢包含GROUP BY和 ORDER BY子句以不同的方式列出列,通常會發生這種情況。

6.Using join buffer:關聯表沒有用到索引,需要連接配接緩沖區來存儲中間結果。需要添加索引來優化

更多内容詳見微信公衆号:Python研究所