key_len用于判断复合索引使用了几个列
计算规则
- 字段允许为null,则key_len需额外加1
- 字段是可变长度类型(varchar),则额外加2
详细信息
列类型 | KEY_LEN | 备注 |
---|---|---|
id int | key_len = 4+1 | int为4bytes,允许为NULL,加1byte |
id bigint not null | key_len=8 | bigint为8bytes,不为null,不加1 |
user char(30) utf8 | key_len=30*3+1 | utf8每个字符为3bytes,允许为NULL,加1byte |
user varchar(30) not null utf8 | key_len=30*3+2 | utf8每个字符为3bytes,变长数据类型,加2bytes |
user varchar(30) utf8 | key_len=30*3+2+1 | utf8每个字符为3bytes,允许为NULL,加1byte,变长数据类型,加2bytes |
detail text(10) utf8 | key_len=10*3+2+1 | TEXT截取部分,被视为动态列类型。 |
status smallint utf8 | key_len=2 + 1 | smallint为2bytes,允许NULL,加1byte |