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中

走啦,赶不上车了,如有不对之处,敬请提出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值