【Mysql】MySQL查询计划key_len全知道
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本文首先介绍了MySQL的查询计划中ken_len的含义;然后介绍了key_len的计算方法;最后通过一个伪造的例子,来说明如何通过key_len来查看联合索引有多少列被使用。key_len的含义在M
千家信息网最后更新 2026年11月01日【Mysql】MySQL查询计划key_len全知道
可以看到,查询语句使用了联合索引中的b和d两列来过滤数据。
本文首先介绍了MySQL的查询计划中ken_len的含义;然后介绍了key_len的计算方法;最后通过一个伪造的例子,来说明如何通过key_len来查看联合索引有多少列被使用。
key_len的含义
在MySQL中,可以通过explain查看SQL语句所走的路径,如下所示:
其中,key_len表示使用的索引长度,是以字节为单位。在上面的例子中,由于int型占用4个字节,而索引中只包含了1列,所以,key_len是4。下面是联合索引的情况:
MySQL中key_len计算规则
MySQL中,key_len的计算规则如下:
- 如果列可以为空,则在数据类型占用字节的基础上加1,如int型,不能为空key_len为4,可以为空key_len为5
- 如果列是变长的,则在数据列所占字节的基数上再加2,如varbinary(10),不能为空,则key_len为10 + 2 ,可以为空则key_len为10+2+1
- 如果是字符型,则还需要考虑字符集,如某列的定义是varchar(10),且是utf8,不能为空,则key_len为10 * 3 + 2,可以为空则key_len为10*3+2+1 (为什么要乘以3呢?因为我们采用的是utf8等价utf8-mb3编码,占用三个字节空间)
此外,decimal列的计算方法与上面一样,如果可以为空,则在数据类型占用字节的基础上加1,但是,decimal本身所占用字节数,计算就比较复杂。
根据官方文档可以知道,decimal定义为decimal(M,D),其中,M是总的位数,D是小数点后保留的位数。小数点前与小数点后的数字分开存储,且以9位数为1组,用4个字节保存,如果低于9位数,需要的字节数如下:
例如:
- decimal(20,6)=> 小数点左边14位,小数点右边6位 => 小数点左边分组为5 + 9,需要3个字节+4个字节存储,小数点一个分组,需要3个字节存储 => 总共需要10个字节
- decimal(18,9)=> 小数点左边9位数,小数点右边9位数 => 分别使用4个字节存储 => 共需要 8个字节
- decimal(18,2)=> 小数点左边16位数,小数点右边2位数 => 分组为7 + 9,需要8个字节存储,小数点右边1个字节存储 => 共需要9个字节
通过key_len分析联合索引
如下所示,我们定义了一个表t,表t包含a、b、c、d共4列:
现在要执行SQL语句如下:
select a from t where b = 5 and d = 10 order by c;
假设我们有一个索引ix_x(b,d,c),通过explain得到如下输出:
如果我们定义的联合索引不是`ix_x(b,d,c)`,而是`ix_x(b, c, d)`,通过explain得到的输入如下:
字节
小数
小数点
索引
位数
联合
存储
右边
数据
语句
查询
分组
例子
含义
基础
字符
方法
类型
规则
复杂
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广东猪兼强互联网科技有限公司
互联网与科技发展
互联网与未来科技
贷财互联网科技
西安互联网科技公司
玖二柒互联网科技公司待遇
互联网对科技的发展
互联网为啥属于高科技
江阴互联网智能科技产品进口
996高科技互联网公司
互联网科技创新的路径
玉溪新华互联网科技好不好
互联网科技如何创业
美国互联网科技实力
云鲸互联网络科技有限公司
版纳互联网科技选哪家
互联网科技和医药行业
三亚科技创新互联网基地
上海互联网科技园景观
承德科技产业互联网平台
云南咖啡
互联网科技公司
互联网中国科技
北京互联网科技
互联网科技作文
青海科技产业互联网发展
互联网金融科技展
国大互联网教育科技有限公司薪资
互联网科技实习生岗位
互联网企业和网络科技有限公司