1.select_type
****** :它表示簡單的select,沒有union和子查詢
dependent union:union依賴外層的查詢
dependent subquery:subquery依賴外層的查詢
2.type
system:表僅有一行,這是const型別的特列,平時不會出現,一般出現在mysql內建系統表中
const :表最多有乙個匹配行,const用於比較primary key 或者unique索引。因為只匹配一行資料,所以很快
eq_ref:對於每個來自於前面的表(連線表)的行,只從該錶(被連線表)中讀取一行。這可能是最好的聯接型別,除了const型別。它用在乙個索引的所有部分被聯接使用並且索引是unique或primary key"。eq_ref可以用於使用=比較帶索引的列。
ref:
對於每個來自於前面的表的行組合,所有有匹配索引值的行將從這張表中讀取。如果不能滿足只去一行的情況
,會使用索引,則使用
ref。如果使用的鍵僅僅匹配少量行,該聯接型別是不錯的。
range:給定範圍內的檢索,比如in(xx,***x) 或者between
index :該聯接型別與all相同,除了只有索引樹被掃瞄。這通常比all快,因為索引檔案通常比資料檔案小,一般在使用了覆蓋索引優化的情況下使用
all:對於每個來自於先前的表的行組合,進行完整的表掃瞄。
index_merge:該聯接型別表示使用了索引合併優化方法 常見如 : idx1 = ? or idx2 = ?
key mysql執行計畫使用的索引
ref 和前方表連線的字段,const代表是常量值連線
rows
顯示mysql執行查詢的行數,簡單且重要,數值越大越不好
extra
distinct : 一旦mysql找到了與行相聯合匹配的行,就不再搜尋了
range checked for each: 沒有找到理想的索引,因此對於從前面表中來的每乙個行組合,mysql檢查使用哪個索引,並用它來從表中返回行。這是使用索引的最慢的連線之一
using filesort: 發生了硬碟或記憶體排序,一般是由order by 或 group by觸發的;典型的情況,排序的字段不是驅動表的字段,則會使用臨時表將資料都新增進去,最後進行排序,如果資料大則硬碟排序,如果小則記憶體排序.
using index:列資料是從僅僅使用了索引中的資訊而沒有讀取實際的行動的表返回的,使用了覆蓋索引優化
using temporary:使用了臨時表,通常和filesort一起發生. 典型情況:使用了派生表.
using where: 資料庫服務層從儲存引擎提取了資料又進行了一次條件過濾
using index condition: icp優化,從5.6之後提供.將過濾條件下推到儲存引擎層執行,能更好的利用復合索引來過濾資料,減少io.
using index for group-by:使用了鬆散索引掃瞄
mysql explain欄位說明
explain列的解釋 id 查詢的序列號 select type select查詢的型別,主要是區別普通查詢和聯合查詢 子查詢之類的複雜查詢。table 所訪問的資料庫中表的名稱。type 這是重要的列,顯示連線使用了何種型別。從最好到最差的連線型別為const eq reg ref range ...
mysql explain查詢結果字段說明
1 id 這是select的查詢序列號 2 select type select type就是select的型別,可以有以下幾種 簡單select 不使用union或子查詢等 primary 最外面的select union union中的第二個或後面的select語句 dependent unio...
mysql explain 各個欄位的含義
1 id列數字越大越先執行,如果說數字一樣大,那麼就從上往下依次執行,id列為null的就表是這是乙個結果集,不需要使用它來進行查詢。2 select type列常見的有 a 表示不需要union操作或者不包含子查詢的簡單select查詢。有連線查詢時,外層的查詢為 且只有乙個 b primary ...