文章目錄
- type 訪問類型
- 性能高到低
- 多注意
- type: index 出現的場景
- key 實際使用的索引
- Extra 額外信息
- 其他字段
通過 EXPLAIN 你可以知道:如是否使用索引、掃描多少行、是否需要排序或臨時表
EXPLAIN 三板斧(type、key、Extra)
例子:
explain select * from user where 'name' = '小明'
type 訪問類型
性能高到低
表示 MySQL 是如何查找表中的數據,怎么做數據檢索的,是查詢性能的關鍵指標
性能從高到低排序:
system > const > eq_ref > ref > range > index > ALL
- system:表僅有一行數據(系統表或單行表),這是 const 的特例
- const:通過主鍵或唯一索引查找,且查詢條件是常量,性能極高,因為直接定位到單行數據
- eq_ref:在多表連接(JOIN)中,通過主鍵或唯一索引進行等值匹配,每行只匹配一行數據,性能非常高,逐行精確匹配
- ref:表示使用了非唯一的索引(普通索引),或者唯一索引的前綴進行等值匹配
- range:通過索引進行范圍掃描,返回符合條件的行(如 BETWEEN、>、< 等),性能中等,優于全表掃描但不如等值匹配
- index:進行了全索引掃描,掃描整個索引樹而不是表數據。只遍歷索引樹,不訪問數據文件。
- all:表示全表掃描,未使用索引
多注意
type 如果是從 range 以及一下就需要多留意關注了
type: index 出現的場景
- 查詢字段完全被索引覆蓋
- 復合索引覆蓋查詢字段和條件
key 實際使用的索引
key 會顯示你使用的索引名
如果沒用索引,那么這里會顯示 NULL
Extra 額外信息
Using index: 表示使用了 覆蓋索引(Covering Index),即查詢的所有字段都在索引中,無需回表(性能最佳)
Using where: 表示存儲引擎返回數據后,MySQL 服務器層需要再次過濾數據(可能需優化)
Using filesort: 表示需要文件排序(性能較差,需避免)
Using temporary: 表示需要創建臨時表(性能差,需優化)
其他字段
select_type:查詢的類型或復雜性,描述查詢的結構(如簡單查詢、子查詢、聯合查詢等)
possible_keys:查詢可能使用的索引列表(可能,但不一定實際使用)
ref:顯示索引的哪一列被使用,以及與之比較的值(如常量、列名),const,表示使用了等值匹配
rows:MySQL 估計需要掃描的數據行數(估算值),注意不是掃描是索引樹中的數據條數
filtered:剩余滿足查詢條件的記錄百分比