MySQL explain中key_len的计算

   key_len表示索引使用的字节数,根据这个值可以判断索引的使用情况,特别是在组合索引的时候,判断该索引有多少部分被使用到非常重要。
  • 可以分为变长和定长数据类型讨论,当索引字段为定长数据类型时,如char,int,datetime,需要有是否为空的标记,这个标记占用1个字节(对于not null的字段来说,则不需要这1字节);对于变长数据类型,比如varchar,除了是否为空的标记外,还需要有长度信息,需要占用两个字节。
  • 对于,char、varchar、blob等字符集来说,key len的长度还和字符集有关,latin1一个字符占用1个字节,gbk一个字符占用2个字节,utf8一个字符占用3个字节。
类型 KEY_LEN 备注
int key_len=4 utf8mb4 int每个字符为4bytes,允许为NULL,加1byte
bigint key_len=8 utf8mb4 int每个字符为8bytes,允许为NULL,加1byte
char key_len=n*4 utf8mb4 char每个字符为4bytes,允许为NULL,加1bytes
varchar key_len=n*4+2 utf8mb4 char每个字符为4bytes,允许为NULL,加1byte,变长数据类型,加2bytes
鲁ICP备16017569号-2