请问
1为何type会是index? 将
2为何extra会有using index?
3keyleng的777是怎么计算出来的?
感谢大家!!祝各位前辈周末愉快!

解决方案 »

  1.   

    type:index 表示查询时扫描索引树,而不是扫描表
    extra:using index 表示字段信息直接从索引树中取得
    至于 key_len:777 (索引长度)就和 MySQL 的内部实现相关了
      

  2.   

    type列中出现了index,扫描全表的顺序,仅仅是按索引顺序去扫描的。
    extra列中出现using index:出现这个说明mysql使用了覆盖索引,避免访问了表的数据行。也可以理解为命中索引
    key_len 的值,根据这个值可以判断索引的长度,计算方法可以参考:http://www.cnblogs.com/zhoujinyi/p/3784450.html
      

  3.   

    price decimal(20,3)
    bn varchar(255)decimal 将每9个数位压缩成4个字节,所以 ceiling(20/9)*4 = 12
    varchar 按字符集扩展实际空间,对于 utf-8 有 255*3 = 765
    两者相加为 777
      

  4.   

    根据官方文档可以知道,decimal定义为decimal(M,D),其中,M是总的位数,D是小数点后保留的位数。小数点前与小数点后的数字分开存储,且以9位数为1组,用4个字节保存,如果低于9位数,需要的字节数如下:Leftover Digits Number of Bytes
    -----------------------------
    |0              |0          |
    |1-2            |1          |
    |3-4            |2          |
    |5-6            |3          |
    |7-9            |4          |
    -----------------------------price decimal(20,3) =>小数点左边17位,小数点右边3位 => 小数点左边分组为9+8 ,需要4个字节+4个字节存储,小数点右边一个分组3,需要2个字节存储 => 总共需要10个字节bn varchar(255) utf8 
    255*3 = 765因为varchar是变长字段,额外增加2字节,
    所以就是10+765+2 = 777