mysql explain key_len是如何计算的?

Posted 你个佬六

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql explain key_len是如何计算的?相关的知识,希望对你有一定的参考价值。

表结构

索引情况:

explain执行计划

key_len是如何计算的?

决定key_len值的三个因素:

1.字符集

2.长度

3.是否为空

常用的字符编码占用字节数量如下::

目前我的数据库字符编码格式用的:UTF8占3个字节。

mysql常用字段占用字节数:

字段类型占用字节数
char(n)n
varchar(n)n + 2
tinyint1
smallint2
int4
bigint8
date3
timestamp4
datetime8

此外,如果字段类型允许为空则加1个字节。
上图中的 184是怎么算的?

184 = 30 * 3 + 2 + 30 * 3 + 2
再把test1表的code字段类型改成char,并且改成允许为空:

执行sql如下:

explain select code from test1;
结果:

怎么算的?
183 = 30 * 3 + 1 + 30 * 3 + 2

还有一个问题:为什么这列表示索引使用是否充分呢,还有使用不充分的情况?

执行sql如下:

explain select code from test1 where code=‘001’;
结果:

上图中使用了联合索引:idx_code_name,如果索引全匹配key_len应该是183,但实际上却是92,这就说明没有使用所有的索引,索引使用不充分。

以上是关于mysql explain key_len是如何计算的?的主要内容,如果未能解决你的问题,请参考以下文章

mysql explain key_len是如何计算的?

MySQL执行计划explain的key_len解析

解读EXPLAIN执行计划中的key_len(转)

mysql explain 中key_len的计算

MYSQL EXPLAIN 中的KEY_LEN的说明

explain之key_len的计算公式