发布于 

Mysql 中索引长度的计算方式

Mysql 通过执行计划(explain)中的key_len(索引长度)来判断是否合理使用到联合索引,索引长度的计算方式

key_len 的计算方式

key_len 计算规则如下:

  • 字符串
    • char(n): n字节长度
    • varchar(n): 如果是utf8编码, 则是3n + 2字节; 如果是utf8mb4编码, 则是4n + 2字节.
  • 数值类型
    • TINYINT: 1字节
    • SMALLINT: 2字节
    • MEDIUMINT: 3字节
    • INT: 4字节
    • BIGINT: 8字节
  • 时间类型
    • DATE: 3字节
    • TIMESTAMP: 4字节
    • DATETIME: 8字节
  • 字段属性
    • NULL属性占用一个字节
    • 如果一个字段是NOT NULL的, 则没有此属性

判断依据

如果联合索引的实际长度 和执行计划中的 key_len 相等,则有可能用到联合索引的全部字段,否则用其中一个字段