mysql explain理解
#1.explain中各個名稱的解釋:
#1.1.id:查詢ID
id是一組數字,表示查詢中執行select子句或操作表的順序,如果id相同,則執行順序從上至下,如果是子查詢,id的序號會遞增,id越大則優先級越高,越先會被執行。
#1.2.select_type:聲明類型
常見的六個值:
1.SIMPLE:簡單的select查詢,查詢中不包含子查詢或者UNION。
2.PRIMARY:查詢中若包含任何復雜的子部分,最外層查詢則被標記為primary。
3.SUBQUERY:在SELECT或WHERE列表中包含了子查詢。
4.DERIVED:在FROM列表中包含的子查詢被標記為DERIVED(衍生),Mysql會遞歸執行這些子查詢,把結果放在臨時表里。
5.UNION:若第二個SELECT出現在UNION之后,則被標記為UNION;若UNION包含在FROM子句的子查詢中,外層SELECT將標記為:DERIVED。
6.UNION RESULT:從UNION表獲取結果的SELECT。
#1.3.table:引用表
顯示的查詢表名,如果查詢使用了別名,那么這里顯示的是別名。
如果不涉及對數據表的操作,那么這顯示為null。
如果顯示為尖括號括起來的<derived N>就表示這個是臨時表,后邊的N就是執行計劃中的id,表示結果來自于這個查詢產生。
如果是尖括號括起來的<union M,N>,與<derived N>類似,也是一個臨時表,表示這個結果來自于union查詢的id為M,N的結果集。
#1.4.type:連接類型
依次從好到差:
system > const > eq_ref > ref > range > index > ALL
重點:一般來說,得保證查詢至少達到range級別,最好能達到ref級別
system:表只有一行記錄(等于系統表),這是const類型的特例,平時不會出現,這個也可以忽略不計。
const:表示通過索引一次就找到了,const用于比較primary key 或者unique索引。因為只匹配一行數據,所以很快。如將主鍵置于where列表中,mysql就能將該查詢轉換為一個常量。
eq_ref:唯一索引掃描,對于每個索引鍵,表中只有一條記錄與之匹配。常見于主鍵或者唯一索引掃描。
ref:非唯一性索引掃描,返回匹配某個單獨值得所有行。本質上也是一種索引訪問,它返回所有匹配某個單獨值得行,然而,他可能會找到多個符合條件的行,所以他應該屬于查找和掃描的混合體。
range:只檢索給定范圍的行,使用一個索引來選擇行。key例顯示使用了哪個索引。一般就是在你的where語句中出現了between、<、>、in等的查詢。這種范圍掃描索引掃描比全表掃描要好,因為它只需要開始于索引的某一點,而結束于另一點,不用掃描全部索引。
index:Full Index Scan,index和ALL區別為index類型只遍歷索引樹。這通常比ALL快,因為索引文件通常比數據文件小。(也就是說雖然all和Index都是讀全表,但index是從索引中讀取的,而all是從硬盤中讀的)。
all:Full Table Scan,將遍歷全表以找到匹配的行。
#1.5.possible_keys:
#1.6.key:
#1.7.key_len:
#1.8.ref:
#1.9.rows:
#1.10.Extra:
微信掃一掃:關注我個人訂閱號“猿小飛”,更多精彩文章在這里及時發布:
?
總結
以上是生活随笔為你收集整理的mysql explain理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos7每天定时删除备份mysql
- 下一篇: springboot 数据库链接池常用配