各屬性含義:
id: 查詢的序列號
select_type: 查詢的類型忽冻,主要是區(qū)別普通查詢和聯(lián)合查詢焰坪、子查詢之類的復(fù)雜查詢
SIMPLE:查詢中不包含子查詢或者UNION
查詢中若包含任何復(fù)雜的子部分,最外層查詢則被標(biāo)記為:PRIMARY
在SELECT或WHERE列表中包含了子查詢阁猜,該子查詢被標(biāo)記為:SUBQUERY
table: 輸出的行所引用的表
type: 訪問類型
從左至右丸逸,性能由差到好
ALL: 掃描全表
index: 掃描全部索引樹
range: 掃描部分索引,索引范圍掃描剃袍,對索引的掃描開始于某一點黄刚,返回匹配值域的行,常見于between民效、<憔维、>等的查詢
ref: 使用非唯一索引或非唯一索引前綴進(jìn)行的查找
(eq_ref和const的區(qū)別:)
eq_ref:唯一性索引掃描涛救,對于每個索引鍵,表中只有一條記錄與之匹配业扒。常見于主鍵或唯一索引掃描
const, system: 單表中最多有一個匹配行检吆,查詢起來非常迅速,例如根據(jù)主鍵或唯一索引查詢程储。system是const類型的特例蹭沛,當(dāng)查詢的表只有一行的情況下, 使用system章鲤。
NULL: 不用訪問表或者索引摊灭,直接就能得到結(jié)果,如select 1 from test where 1
possible_keys: 表示查詢時可能使用的索引咏窿。如果是空的斟或,沒有相關(guān)的索引。這時要提高性能集嵌,可通過檢驗WHERE子句萝挤,看是否引用某些字段,或者檢查字段不是適合索引
key: 顯示MySQL實際決定使用的索引根欧。如果沒有索引被選擇怜珍,是NULL
key_len: 使用到索引字段的長度
注:key_len顯示的值為索引字段的最大可能長度,并非實際使用長度凤粗,即key_len是根據(jù)表定義計算而得酥泛,不是通過表內(nèi)檢索出的。
ref: 顯示哪個字段或常數(shù)與key一起被使用
rows: 這個數(shù)表示mysql要遍歷多少數(shù)據(jù)才能找到嫌拣,表示MySQL根據(jù)表統(tǒng)計信息及索引選用情況柔袁,估算的找到所需的記錄所需要讀取的行數(shù),在innodb上可能是不準(zhǔn)確的
Extra: 執(zhí)行情況的說明和描述异逐。包含不適合在其他列中顯示但十分重要的額外信息捶索。
Using index:表示使用索引,如果只有 Using index灰瞻,說明他沒有查詢到數(shù)據(jù)表腥例,只用索引表就完成了這個查詢,這個叫覆蓋索引酝润。
Using where:表示條件查詢燎竖,如果不讀取表的所有數(shù)據(jù),或不是僅僅通過索引就可以獲取所有需要的數(shù)據(jù)要销,則會出現(xiàn) Using where构回。
轉(zhuǎn)自 https://segmentfault.com/q/1010000014908005
官方參考文檔:https://dev.mysql.com/doc/refman/8.0/en/explain-output.html#explain-join-types
type 還有 fulltext 類型使用在fulltext 索引上,詳情見https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html
更多mysql的優(yōu)化 https://dev.mysql.com/doc/refman/8.0/en/optimization.html