mysql explain 中key_len的计算方法

建议先阅读这篇文章:http://hidba.org/?p=404 下面我们只对其中提到的做一个验证。 (1).索引字段的附加信息:可以分为变长和定长数据类型讨论,当索引字段为定长数据类型,比如char,int,datetime,需要有是否为空的标记,这个标记需要占用1个字节;对于变长数据类型,比如:varchar,除了是否为空的标记外,还需要有长度信息,需要占用2个字节; (备注:当字段定义为非空的时候,是否为空的标记将不占用字节) (2).同时还需要考虑表所使用的字符集,不同的字符集,gbk编码的为一个字符2个字节,utf8编码的一个字符3个字节, utf8mb4 编码则是4个字节; 每种MySQL数据类型的定义参考:https://blog.haohtml.com/archives/15222 下面我们以定长数据类型准,变长数据类型请自行测试。 一、数据索引类型允许为null的情况: 表结构: CREATE TABLE `tb` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `sid` smallint(5) DEFAULT NULL, `gid` smallint(5) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_common` (`sid`,`gid`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; 执行分析语句: … Continue reading mysql explain 中key_len的计算方法