Mysql explain中的關(guān)鍵字段(通俗易懂篇)

作者:可愛(ài)豬豬 - 帥鍋一枚
作者的網(wǎng)名很闊愛(ài),如果喜歡本文章一定要點(diǎn) 喜歡 或者 打賞,拜托~
作者一直在進(jìn)步,需要你們的支持和鼓勵(lì),謝謝!
人生理想:在程序猿界混出點(diǎn)名堂!

請(qǐng)讀者,認(rèn)真讀完這篇文章,一定可以解開(kāi)你心中多年的謎團(tuán)!

1.possible_keys

條件字段在索引中存在,則將該索引列出。
注意:如果用到了索引,也就是key不為空,但possible_keys為空,那么使用了覆蓋索引。
所謂覆蓋索引,就是查詢(xún)的時(shí)候select 的列就是索引字段。

2.key

使用的索引
這里使用的索引,并不代表一定用上了索引,用沒(méi)用索引,以及索引如何用的還要取決于type字段

3.key_len

索引字段的長(zhǎng)度,跟查詢(xún)的結(jié)果集無(wú)關(guān)。只是跟索引字段的定義的長(zhǎng)度有關(guān)。

這里需要搞懂兩個(gè)問(wèn)題:

  • 如何計(jì)算索引長(zhǎng)度
    我直接說(shuō)結(jié)果免的去看網(wǎng)上那么多測(cè)試和長(zhǎng)篇大論
    一般數(shù)據(jù)庫(kù)采用utf-8,
    varchar類(lèi)型的長(zhǎng)度為3*len+2
    char類(lèi)型的長(zhǎng)度為3len
    int類(lèi)型的長(zhǎng)度4
    bigint的長(zhǎng)度是8
    此外,如果是null,在以上的基礎(chǔ)+1,
    題外話(huà):mysql建議字段設(shè)置為not null來(lái)節(jié)省空間,此外int(10)并不是說(shuō)占10個(gè)字節(jié)或者10位的長(zhǎng)度,而只是不滿(mǎn)10位填0,僅展示用
    舉例:
    utf-8下 a varchar(10) 長(zhǎng)度為3(utf-8)
    10+2(varchar)+1(null) = 33

  • key_len的作用
    主要看用的聯(lián)合索引的長(zhǎng)度,
    對(duì)于聯(lián)合索引來(lái)說(shuō),只能根據(jù)type和key來(lái)判斷用沒(méi)有用上索引,用的哪個(gè)索引,但是索引用的哪個(gè)字段并推理不出,所以根據(jù)key_len和最左原則來(lái)推斷。
    至于網(wǎng)上有些文章說(shuō)它越小越好,不一定有道理。比如聯(lián)合索引全部使用key_len就比較大,但性能就好。

4.type

表示是否用上索引,以及索引是如何使用的,此字段決定索引的性能。
先看結(jié)果,性能由低到高:
ALL<TYPE<RANGE<REF<CONST

  • ALL:全表掃描
  • TYPE:掃描全表的順序是按照索引順序掃描的
  • RANGE:between或者“>”這種符號(hào)的時(shí)候會(huì)出現(xiàn)這個(gè)
  • REF:經(jīng)作者多次驗(yàn)證發(fā)現(xiàn),非唯一索引或者非主鍵,也就是你的查詢(xún)條件有可能返回多條結(jié)果,則為REF
  • CONST:經(jīng)作者多次驗(yàn)證發(fā)現(xiàn),不管是聯(lián)合唯一索引還是主鍵,也就是你的查詢(xún)條件是唯一的,則為CONST

官方一點(diǎn)的解釋可參考這篇文章:
https://www.cnblogs.com/mydriverc/p/7086494.html

5.extra

以下兩個(gè)比較重要:

  • using index:出現(xiàn)這個(gè)說(shuō)明mysql使用了覆蓋索引,避免訪問(wèn)了表的數(shù)據(jù)行,效率不錯(cuò)!通俗的說(shuō)也就是查詢(xún)的列不需要回表,在索引樹(shù)上就能拿到結(jié)果
  • using where:這說(shuō)明服務(wù)器在存儲(chǔ)引擎收到行后將進(jìn)行過(guò)濾。有些where中的條件會(huì)有屬于索引的列,當(dāng)它讀取使用索引的時(shí)候,就會(huì)被過(guò)濾,所以會(huì)出現(xiàn)有些where語(yǔ)句并沒(méi)有在extra列中出現(xiàn)using where這么一個(gè)說(shuō)明。

微信公眾號(hào):可愛(ài)豬豬聊程序,每天連載更新,內(nèi)容易懂、精彩不斷

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。