Mysql explain各個屬性含義
阿新 • • 發佈:2018-12-31
以下全部詳細解析explain各個屬性含義:
各屬性含義:
id: 查詢的序列號
select_type: 查詢的型別,主要是區別普通查詢和聯合查詢、子查詢之類的複雜查詢
SIMPLE
:查詢中不包含子查詢或者UNION
- 查詢中若包含任何複雜的子部分,最外層查詢則被標記為:
PRIMARY
- 在
SELECT
或WHERE
列表中包含了子查詢,該子查詢被標記為:SUBQUERY
table: 輸出的行所引用的表
type: 訪問型別
從左至右,效能由差到好
- ALL: 掃描全表
- index: 掃描全部索引樹
- range: 掃描部分索引,索引範圍掃描,對索引的掃描開始於某一點,返回匹配值域的行,常見於between、<、>等的查詢
- ref: 使用非唯一索引或非唯一索引字首進行的查詢
(eq_ref和const的區別:
eq_ref:唯一性索引掃描,對於每個索引鍵,表中只有一條記錄與之匹配。常見於主鍵或唯一索引掃描
const, system: 單表中最多有一個匹配行,查詢起來非常迅速,例如根據主鍵或唯一索引查詢。system是const型別的特例,當查詢的表只有一行的情況下, 使用system。
- NULL: 不用訪問表或者索引,直接就能得到結果,如
select 1 from test where 1
possible_keys: 表示查詢時可能使用的索引。如果是空的,沒有相關的索引。這時要提高效能,可通過檢驗WHERE子句,看是否引用某些欄位,或者檢查欄位不是適合索引
key: 顯示MySQL實際決定使用的索引。如果沒有索引被選擇,是NULL
key_len: 使用到索引欄位的長度
注:key_len顯示的值為索引欄位的最大可能長度,並非實際使用長度,即key_len是根據表定義計算而得,不是通過表內檢索出的。
ref: 顯示哪個欄位或常數與key一起被使用
rows: 這個數表示mysql要遍歷多少資料才能找到,表示MySQL根據表統計資訊及索引選用情況,估算的找到所需的記錄所需要讀取的行數,在innodb上可能是不準確的
Extra: 執行情況的說明和描述。包含不適合在其他列中顯示但十分重要的額外資訊。
- Using index:表示使用索引,如果只有 Using index,說明他沒有查詢到資料表,只用索引表就完成了這個查詢,這個叫覆蓋索引。
- Using where:表示條件查詢,如果不讀取表的所有資料,或不是僅僅通過索引就可以獲取所有需要的資料,則會出現 Using where。