mysql explain key_len小結


http://hidba.org/?p=404

這片文章介紹了key_len參數值的計算方法

我再此稍微擴展下,如有雷同實屬榮幸

key_len是表示得到結果集所使用的選擇的索引的長度,但不包括order by,也就是說,如果order by也使用了索引則key_len則不計算在內

帖代碼

SELECT t. *
FROM tb_1 t
FORCE INDEX ( idx_fid_dis_la )
WHERE t.fid = '6572'
ORDER BY t.dis DESC , t.la DESC
LIMIT 100 , 40

執行計划

id     select_type     table     type     possible_keys     key     key_len     ref     rows     Extra
1     SIMPLE              t     ref     idx_fid_dis_la  idx_fid_dis_la   2     const     147     Using where

注:fid: 2byte dis:1byte la:4byte

不像上邊那樣使用聯合索引

SELECT t. *
FROM tb_1 t

WHERE t.fid = '6572'
ORDER BY t.dis DESC , t.la DESC
LIMIT 100 , 40

執行計划:

id     select_type     table     type     possible_keys     key     key_len     ref     rows     Extra
1       SIMPLE            t     ref         typeid         typeid     2        const     127     Using where; Using filesort

注意這里extra里有了Using filesort,但用到的索引的長度仍然是2byte,也就是說得到結果只用到了fid字段,而order by 時沒用到索引

 

總結:在得到結果但沒將結果排序這一步時都只利用了fid,但是上一個索引(idx_fid_dis_la  )里有order by可利用的字段,而下一個索引里沒有

雖然上一句中的order by用到了索引但是沒有計算到key_len中

走啦,趕不上車了,如有不對之處,敬請提出


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM