Mysql explain中的關鍵字段(通俗易懂篇) 1.possible_keys 2.key 3.key_len 4.type 5.extra

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

請讀者,認真讀完這篇文章,一定可以解開你心中多年的謎團!

1.possible_keys

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

2.key

使用的索引
這裏使用的索引,並不代表一定用上了索引,用沒用索引,以及索引如何用的還要取決於type字段

3.key_len

索引字段的長度,跟查詢的結果集無關。只是跟索引字段的定義的長度有關。

這裏需要搞懂兩個問題:

  • 如何計算索引長度
    我直接說結果免的去看網上那麼多測試和長篇大論
    一般數據庫採用utf-8,
    varchar類型的長度爲3*len+2
    char類型的長度爲3len
    int類型的長度4
    bigint的長度是8
    此外,如果是null,在以上的基礎+1,
    題外話:mysql建議字段設置爲not null來節省空間,此外int(10)並不是說佔10個字節或者10位的長度,而只是不滿10位填0,僅展示用
    舉例:
    utf-8下 a varchar(10) 長度爲3(utf-8)
    10+2(varchar)+1(null) = 33

  • key_len的作用
    主要看用的聯合索引的長度,
    對於聯合索引來說,只能根據type和key來判斷用沒有用上索引,用的哪個索引,但是索引用的哪個字段並推理不出,所以根據key_len和最左原則來推斷。
    至於網上有些文章說它越小越好,不一定有道理。比如聯合索引全部使用key_len就比較大,但性能就好。

4.type

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

  • ALL:全表掃描
  • TYPE:掃描全表的順序是按照索引順序掃描的
  • RANGE:between或者“>”這種符號的時候會出現這個
  • REF:經作者多次驗證發現,非唯一索引或者非主鍵,也就是你的查詢條件有可能返回多條結果,則爲REF
  • CONST:經作者多次驗證發現,不管是聯合唯一索引還是主鍵,也就是你的查詢條件是唯一的,則爲CONST

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

5.extra

以下兩個比較重要:

  • using index:出現這個說明mysql使用了覆蓋索引,避免訪問了表的數據行,效率不錯!通俗的說也就是查詢的列不需要回表,在索引樹上就能拿到結果
  • using where:這說明服務器在存儲引擎收到行後將進行過濾。有些where中的條件會有屬於索引的列,當它讀取使用索引的時候,就會被過濾,所以會出現有些where語句並沒有在extra列中出現using where這麼一個說明。

微信公衆號:可愛豬豬聊程序,每天連載更新,內容易懂、精彩不斷

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