explain中key_len的作用

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 还在等什么,快来一起讨论关注吧,公众号【八点半技术站】,欢迎加入社群

mysql explain中key_len的作用

key_len越小 索引效果越好

name的字段类型是varchar(20),字符编码是utf8,一个字符占用3个字节,那么key_len应该是 20*3=60。

               mysql> explain select * from `member` where name='fdipzone'; +----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+ | id | select_type | table  | type | possible_keys | key  | key_len | ref   | rows | Extra                 | +----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+ |  1 | SIMPLE      | member | ref  | name          | name | 63      | const |    1 | Using index condition |              

列名

用途

id

每一个SELECT关键字查询语句都对应一个唯一id

select_type

SELECT关键字对应的查询类型

table

表名

partitions

匹配的分区信息

type

单表的访问方法

possible_keys

可能用到的索引

key

实际使用到的索引

key_len

实际使用到的索引长度

ref

当使用索引列等值查询时,与索引列进行等值匹配的对象信息

rows

预估需要读取的记录条数

filtered

某个表经过条件过滤后剩余的记录条数百分比

Extra

额外的一些信息

所以:

1 . 设置字段长度尽量小

2 . 用定长char (key_len会少1)

3 . 用not null(key_len会少1)

key_len表示索引使用的字节数,根据这个值,就可以判断索引使用情况,特别是在组合索引的时候,判断所有的索引字段是否都被查询用到。

char和varchar跟字符编码也有密切的联系,latin1占用1个字节,gbk占用2个字节,utf8占用3个字节。(不同字符编码占用的存储空间不同)

image.png

1、索引字段为char类型的key_len计算:

(1)允许为Null时

image.png

可以看到key_len=31,这个31是字节长度,它是怎么算出来的呢?让我们一起来分析下:

从表结构可以看到字符集是utf8,那就一个字符3个字节,那么char(10)代表的是10个字符相当30个字节,Null 占1个字节,char类型不需要额外的字节来存储值的的长度,所以得到:key_len:10x3+1=31,可以看到跟上面的结果一致的。

(2)不允许为Null时

image.png

算法和上面差不多,只是字段不允许为Null,所以比上面的例子少了一个字节,key_len=10x3=30

2、索引字段为varchar类型且允许为Null时的key_len计算:

(1)允许为Null时

image.png

还是utf8的字符集,所以还是一个字符3个字节,那么varchar(10)就是10个字符30个字节,Null占一个字节,由于varchar类型需要额外的1~2字节来存储值的的长度:所以key_len:10x3+1+2=33

(2)不允许为Null时

image.png

相信大家都会算了吧,哈哈,不允许为Null就少了一个字符,所以Key_len:10x3+2=32

相关文章
|
10月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
622 100
|
SQL 关系型数据库 MySQL
【揭秘】MySQL binlog日志与GTID:如何让数据库备份恢复变得轻松简单?
【8月更文挑战第22天】MySQL的binlog日志记录数据变更,用于恢复、复制和点恢复;GTID为每笔事务分配唯一ID,简化复制和恢复流程。开启binlog和GTID后,可通过`mysqldump`进行逻辑备份,包含binlog位置信息,或用`xtrabackup`做物理备份。恢复时,使用`mysql`命令执行备份文件,或通过`innobackupex`恢复物理备份。GTID模式下的主从复制配置更简便。
2102 2
|
Kubernetes Cloud Native Java
灰度发布、蓝绿部署、金丝雀都是啥?
在滚动部署中,应用的新版本逐步替换旧版本。实际的部署发生在一段时间内。在此期间,新旧版本会共存,而不会影响功能和用户体验。这个过程可以更轻易的回滚和旧组件不兼容的任何新组件。
灰度发布、蓝绿部署、金丝雀都是啥?
|
缓存
DevEco Studio 5.0.1 Beta3安装及配置
本文介绍了如何下载、安装和配置华为DevEco Studio 5.0.1 Beta3,并详细说明了安装HarmonyOS模拟器及创建虚拟机的步骤。包括下载安装包、卸载旧版本、选择安装目录、创建快捷方式、启动DevEco Studio、配置环境、进入设备管理器、下载虚拟机镜像、创建和启动虚拟机等操作。
3525 1
|
自然语言处理 应用服务中间件 程序员
Nginx UI:全新的 Nginx 在线管理平台
Nginx UI:全新的 Nginx 在线管理平台
834 1
|
API 开发者
【cocos 2d微信小游戏开发教程】基础使用笔记分享(一)
【cocos 2d微信小游戏开发教程】基础使用笔记分享(一)
1164 0
|
存储 关系型数据库 MySQL
深入理解MySQL中varchar和text的区别
在MySQL中,varchar和text都是用于存储文本数据的数据类型。varchar是可变长度字符串,存储时按实际长度分配空间,适合存储较短的、长度可变的字符串,如用户名。text类型用于存储大量文本,始终占用足够空间,适合文章内容。varchar在存储和查询时可能更快,可被索引,而text需特殊搜索技术。在数据库设计时,应根据存储需求和性能平衡选择。
2595 0
|
缓存 网络协议 Linux
Dockerfile构建镜像过程中的错误记录及解决方法
本文记录了在一次使用Dockefile构建镜像的途中遇到的问题,以及后续的解决方法。
11883 1
|
分布式计算 并行计算 大数据
并行计算框架Polars、Dask的数据处理性能对比
在Pandas 2.0发布以后,我们发布过一些评测的文章,这次我们看看,除了Pandas以外,常用的两个都是为了大数据处理的并行数据框架的对比测试。
903 0