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