分析SQL查詢語句的執行情況,只能解釋select操作。
常用欄位
-
select_type——查詢中每個select子句的型別
-
SIMPLE:表示簡單查詢(不使用聯合查詢或子查詢)
-
PRIMARY:如果包含關聯查詢或自查詢,則表示最外層的查詢語句;
-
UNION:表示聯合查詢的第2個或後面的查詢語句;
-
-
type——查詢型別,指明瞭MySQL在表中找到所需行的方式 ALL, index, range, ref, eq_ref, const, system, NULL(從左到右,效能從差到好)
-
ALL:全表掃描
-
index: 全索引掃描,即掃描全部的索引
-
range:範圍掃描,利用索引選擇待查詢行
-
ref: 一種索引訪問,也稱索引查詢,它返回所有匹配某個單個值的行。
-
eq_ref: 使用這種索引查詢,最多隻返回一條符合條件的記錄。在使用唯一性索引或主鍵查詢時會出現該值,非常高效。
-
const:基於主鍵或唯一索引查詢,最多返回一條結果
-
system: 是const型別的特例,當查詢物件表只有一行資料,使用system。
-
NULL: 在執行階段不需要訪問表。
-
-
possible_keys——可能使用的索引
-
key——實際使用的索引
-
key_len——使用的索引的長度。在不損失精確性的情況下,長度越短越好
-
ref——哪些欄位或者常量被用來和key配合從表中查詢記錄
-
rows——mysql認為必須檢查的用來返回請求資料的行數,是估算的行數
-
extra——其他資訊
-
Using index:使用覆蓋索引,表示查詢索引就可查到所需資料,不用掃描表資料檔案,往往說明效能不錯。
-
Using Where:在儲存引擎檢索行後再進行過濾,使用了where從句來限制哪些行將與下一張表匹配或者是返回給使用者。
-
Using temporary:在查詢結果排序時會使用一個臨時表,一般出現於排序、分組和多表 join 的情況,查詢效率不高,建議最佳化。
-
Using filesort:對結果使用一個外部索引排序,而不是按索引次序從表裡讀取行,一般有出現該值,都建議最佳化去掉,因為這樣的查詢 CPU 資源消耗大。
-
參考:https://zhuanlan.zhihu.com/p/51771446