1. 程式人生 > 其它 >資料庫筆記4——explain命令

資料庫筆記4——explain命令

可以分析sql語句的型別、有沒有使用到索引、分割槽

A、 id欄位:id相同:id越靠前的表越先執行;id不同:id越大的表越先執行

B、 select_type 欄位:

simple: 簡單的 select 查詢,查詢中不包含子查詢或者 union

primary:查詢條件中包含有子查詢時最外層的表

UNION:使用到union關聯時,union關聯的表

UNION RESULT():使用union時,最終的結果集表

SUBQUERY:條件子查詢中的表

C、 partitions: 檢視查詢語句所使用到的分割槽

D、type欄位:反應一段SQL語句效能指標的重要引數,可以通過此引數來判斷是否使用到了索引、是否全表掃描、是 否範圍查詢等,以下效率從高到低

NULL:代表不訪問任何表

system:表中只有一條記錄,並且此表為系統表(一般很少出現)

const:通過唯一索引查詢到的資料,只查詢一次就查詢到了

eq_ref:使用主鍵的關聯查詢,代表有其他表引用了該表的主鍵。

ref:通過非唯一索引查詢到的資料

range:使用索引的範圍查詢(普通列的範圍查詢不會是range)

index:查詢的是索引列,遍歷了索引樹

ALL:效率最低,遍歷全表

E、  possible_keys 欄位:

查詢語句中,可能應用到的索引,並非實際使用到的索引。

F、  key 欄位

key欄位反應sql語句實際使用的索引,為null代表沒有使用索引。

如果是複合索引,還要根據key_len欄位結合判斷具體用到了複合索引中的哪幾個

G、 key_len 欄位

表示索引中使用的位元組數,公式=字元編碼(utf8=3,utf8mb4=4)*長度+變長(2)或定長(1)+可空(1)或不肯空(0)

例如對列:name varchar(50) not null 建立索引,則key_len=4*50+2+0=202

H、rows 欄位

根據表統計資訊及選用情況,大致估算出找到所需的記錄或所需讀取的行數

I、   filtered欄位

返回結果與實際結果的差值佔總記錄數的百分比

J、  extra 欄位,以下效率從高到低

Using index:代表使用到了索引覆蓋(只需要在一棵索引樹上就能獲取SQL所需的所有列資料,無需回表),效率高

NULL:沒有用到額外的附加條件

Using where:掃描全表。通常是查詢條件中不是索引欄位

Using temporary:表示SQL語句的操作使用到了臨時表

Using filesort:排序時無法使用到索引時,就會出現這個。常見於order by和group by語句中。 效率低