【Mysql】MySQL查询计划key_len全知道
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,本文首先介绍了MySQL的查询计划中ken_len的含义;然后介绍了key_len的计算方法;最后通过一个伪造的例子,来说明如何通过key_len来查看联合索引有多少列被使用。key_len的含义在M
千家信息网最后更新 2025年11月08日【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安全错误
数据库的锁怎样保障安全
上海python软件开发费用
中国电科国家网络安全
b类网络安全
平潭网络安全平台
奇安信网络安全就业前景
功能安全和网络安全的区别
数据库嵌套查询实验心得体会
jsp怎么连接数据库
查询数据库中某个表的大小
客户端和服务器如何实现更新
知网定稿查重数据库
计算机网络安全测评机构英文
品质软件开发直销价
f5服务器地址映射
网站初始化数据库
吉林大数据时间同步服务器
乐队数据库
二维码获取数据库原理
数据库报表怎么显示字段
中山软件开发中心
中学生网络安全画报
应用程序与数据库连接
杨飞雪北京中科三方网络技术
长城汽车网络安全
免费的数据库网址
ftp备份到服务器
什么是lan网络技术
网络安全知识测试卷怎么进入
网络技术和社会发展
共享服务器安全