【Mysql】MySQL查询计划key_len全知道
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,本文首先介绍了MySQL的查询计划中ken_len的含义;然后介绍了key_len的计算方法;最后通过一个伪造的例子,来说明如何通过key_len来查看联合索引有多少列被使用。key_len的含义在M
千家信息网最后更新 2025年02月05日【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安全错误
数据库的锁怎样保障安全
上海大众招聘软件开发
计算机用户不重视网络安全
浏览器服务器的安全证书尚未生效
沈阳软件开发工作室
网络安全产品排版设计
网络是把双刃剑网络安全
成都龙湖软件开发是6个月转正吗
ibm服务器维修单
青少年如何做好网络安全工作
智能软件开发介绍
支持2003系统的华为服务器
web服务器数据库设计
哪家互联网科技学校好一些
中国象棋软件开发代码
深圳百汇网络技术有限公司
用友查询数据库方法
软件开发岗位主要职责
登录服务器显示连接失败
王者一直服务器繁忙
网页如何读取数据库的数据
数据库搜索说对象名无效
数据库条数
查找数据源中重复数据库
服务器ip未备案是什么意思
深圳永图时代网络技术
逃离塔科夫德国服务器叫什么
宠物店铺顾客数据库
网络安全热点新闻
上海项目软件开发靠谱吗
美团网络安全笔试