Explain使用簡介

Explain使用簡介

什麼是explain

explain關鍵字可以模擬優化器執行SQL查詢語句,從而知道MySQL是如何處理你的SQL。分析你的查詢語句或是表結構性能瓶頸。

如何使用

explain SQL語句

返回的內容:
這裏寫圖片描述

(1) id: select 查詢的序列號,包含一組數字,表示查詢中select子句或操作表順序。
id相同,執行順序由上至下。
id不同,如果是子查詢,id序號會遞增,id值越大優先級越高,越先執行。
id相同相同不同,id如果相同,可以認爲是一組,從上往下順序執行,在所有組中,id值越大優先級越高,越先執行。
(2) select_type 查詢類型,主要用於區別普通查詢,聯合查詢,子查詢等複雜查詢
主要包含:SIMPLE簡單的select查詢
PRIMARY查詢中包含子查詢最外層被標記。
SUBQUERY子查詢
DERIVED衍生
UNION第二個select出現在UNION後被標記爲UNION
UNION RESULT從UNION表獲取結果的SELECT
(3) table 表名
(4) type 顯示查詢使用了何種類型,從最好到最差依次是: system>const>eq_ref>ref>range>index>All
system:表中只有一行數據(等於系統表) 是const類型特例,平時基本不會出現。
const:表示通過索引一次就找到,如將主鍵至於where語句後,mysql可以將查詢轉換爲一個常量。
eq_ref:用索引進行掃描只有一條記錄與之匹配。
ref:用索引進行掃描返回匹配某個單獨值得所有行。
range:只檢索給定範圍的行,使用索引來選擇行。
index:全索引掃描。
All:全表掃描。
(5)possible_keys 查詢語句中可能使用到的索引,但不一定被查詢實際使用。
(6)key 實際使用的索引,如果爲null,則沒有使用索引。查詢中若使用覆蓋索引,則該索引僅出現在key列中。
(7) key_len 索引字段的最大可能長度,並非實際使用長度。在不丟失精度情況下,長度越短越好。
(8) ref 顯示哪一列索引被使用,哪些列或者常量用於查找索引列上的值。
(9) rows 大致估算出找出需要的數據所需要讀取表中行數。越小越好。
(10) Extra 包含不適合在其他列顯示,但比較重要的信息。

總結:能幹什麼

  1. 表的讀取順序
  2. 數據讀取操作的操作類型
  3. 那些索引可以使用
  4. 那些索引被實際使用
  5. 表之間的引用
  6. 每張表有多少行被優化器查詢
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章