MySQL explain 詳解

image.png

各屬性含義:
id: 查詢的序列號
select_type: 查詢的類型,主要是區(qū)別普通查詢和聯(lián)合查詢、子查詢之類的復雜查詢

SIMPLE:查詢中不包含子查詢或者UNION
查詢中若包含任何復雜的子部分,最外層查詢則被標記為:PRIMARY
在SELECT或WHERE列表中包含了子查詢,該子查詢被標記為:SUBQUERY
table: 輸出的行所引用的表
type: 訪問類型


image.png

從左至右,性能由差到好

ALL: 掃描全表
index: 掃描全部索引樹

range: 掃描部分索引,索引范圍掃描,對索引的掃描開始于某一點,返回匹配值域的行,常見于between、<、>等的查詢

ref: 使用非唯一索引或非唯一索引前綴進行的查找
(eq_ref和const的區(qū)別:)

eq_ref:唯一性索引掃描,對于每個索引鍵,表中只有一條記錄與之匹配。常見于主鍵或唯一索引掃描

const, system: 單表中最多有一個匹配行,查詢起來非常迅速,例如根據(jù)主鍵或唯一索引查詢。system是const類型的特例,當查詢的表只有一行的情況下, 使用system。

NULL: 不用訪問表或者索引,直接就能得到結果,如select 1 from test where 1

possible_keys: 表示查詢時可能使用的索引。如果是空的,沒有相關的索引。這時要提高性能,可通過檢驗WHERE子句,看是否引用某些字段,或者檢查字段不是適合索引

key: 顯示MySQL實際決定使用的索引。如果沒有索引被選擇,是NULL

key_len: 使用到索引字段的長度

注:key_len顯示的值為索引字段的最大可能長度,并非實際使用長度,即key_len是根據(jù)表定義計算而得,不是通過表內檢索出的。

ref: 顯示哪個字段或常數(shù)與key一起被使用

rows: 這個數(shù)表示mysql要遍歷多少數(shù)據(jù)才能找到,表示MySQL根據(jù)表統(tǒng)計信息及索引選用情況,估算的找到所需的記錄所需要讀取的行數(shù),在innodb上可能是不準確的

Extra: 執(zhí)行情況的說明和描述。包含不適合在其他列中顯示但十分重要的額外信息。

Using index:表示使用索引,如果只有 Using index,說明他沒有查詢到數(shù)據(jù)表,只用索引表就完成了這個查詢,這個叫覆蓋索引。
Using where:表示條件查詢,如果不讀取表的所有數(shù)據(jù),或不是僅僅通過索引就可以獲取所有需要的數(shù)據(jù),則會出現(xiàn) Using where。

轉自 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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容