Mysql-explain

explain 關鍵字可以用來分析查詢語句的執行情況
當執行完explain select * from test WHERE name = ‘小王’;這條語句的時候
會出現如下的結果;
在這裏插入圖片描述
(1)id:表示查詢中執行selec子句或者操作表的順序(表的加載數據),有幾個 select 就有幾個id,id爲NULL最後執行。
《1》 id相同時,執行順序是由上往下的。
explain select user.,orders. from user ,orders where user.id=orders.user_id;
在這裏插入圖片描述
《2》如果是子查詢,id的序號會遞增,id值越大優先級越高,越先被執行。
explain select * from orders where user_id = (select id from User where username = ‘張三’);
在這裏插入圖片描述
《3》id如果相同,可以認爲是一組,從上往下順序執行;在所有組中,id值越大,優先級越高,越先執行
在這裏插入圖片描述
2. slect_type :告訴你我現在是什麼類型操作,子查詢,簡單查詢或者其他
select_type類型,有以下幾種
(1)SIMPLE
在這裏插入圖片描述
(2)PRIMARY
在這裏插入圖片描述
(3)UNION
在這裏插入圖片描述
(4)DEPENDENT UNION
在這裏插入圖片描述
(5)DEPENDENT SUBQUERY
在這裏插入圖片描述
(6)DERIVED
在這裏插入圖片描述
3. table:表名
3. type:訪問類型
在這裏插入圖片描述
ALL: MySQL進行全表掃描。
index:全索引掃描。index與ALL區別爲index類型只遍歷索引樹
range:只檢索給定範圍的行,使用一個索引來選擇行
ref:表示上述表的連接匹配條件,即哪些列或常量被用於查找索引列上的值
eq_ref: 類似ref,區別就在使用的索引是唯一索引,對於每個索引鍵值,表中只有一條記錄匹配,簡單來說,就是多表連接中使用primary key或者 unique key作爲關聯條件
const、system: 當MySQL對查詢某部分進行優化,並轉換爲一個常量時,使用這些類型訪問。如將主鍵置於where列表中,MySQL就能將該查詢轉換爲一個常量,system是const類型的特例,當查詢的表只有一行的情況下,使用system
4. possible_keys
possible_keys列指出MySQL能使用哪個索引在該表中找到行。注意,該列完全獨立於EXPLAIN輸出所示的表的次序。這意味着在possible_keys中的某些鍵實際上不能按生成的表次序使用。

如果該列是NULL,則沒有相關的索引。在這種情況下,可以通過檢查WHERE子句看是否它引用某些列或適合索引的列來提高你的查詢性能。如果是這樣,創造一個適當的索引並且再次用EXPLAIN檢查查詢
5. key(非常重要)
key列顯示MySQL實際決定使用的鍵(索引)。如果沒有選擇索引,鍵是NULL。要想強制MySQL使用或忽視possible_keys列中的索引,在查詢中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。
6. key_len
key_len列顯示MySQL決定使用的鍵長度。如果鍵是NULL,則長度爲NULL。
使用的索引的長度。在不損失精確性的情況下,長度越短越好
7. ref
表示上述表的連接匹配條件,即哪些列或常量被用於查找索引列上的值。
8. rows
rows列顯示MySQL認爲它執行查詢時必須檢查的行數
10. Extra
該列包含MySQL解決查詢的詳細信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章