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,这就说明没有使用所有的索引,索引使用不充分。

mysqlkey_len是通过计算索引字段的长度来得出的。具体计算方法如下: 1. 如果索引字段是字符串类型(如varchar、text等),则key_len等于字段的最大长度。例如,如果一个字段的类型是varchar(100),则key_len为100。 2. 如果索引字段是数值类型(如int、bigint等),则key_len等于该字段的存储长度。例如,如果一个字段的类型是int(10),则key_len为4(因为int类型占用4个字节)。 3. 如果索引字段是日期类型(如date、datetime等),则key_len等于8。 需要注意的是,key_len计算了索引字段的长度,并不包括其他字段的长度。 总的来说,key_len代表了索引字段所占用的字节数,用来评估索引的大小和性能。较小的key_len值通常意味着更高效的索引操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [浅谈mysql explainkey_len计算方法](https://download.csdn.net/download/weixin_38524871/13700618)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [MySQL优化篇:执行计划explainkey_len计算方式](https://blog.csdn.net/u012068483/article/details/105270813)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你个佬六

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值