explain中key_len的作用

简介: 还在等什么,快来一起讨论关注吧,公众号【八点半技术站】,欢迎加入社群

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

相关文章
|
7月前
|
数据库
count(1)、count(*)、count(column)的含义、区别、执行效率
总之,`count(1)` 和 `count(*)` 通常会更常用,因为它们的执行效率较高,不涉及对具体列值的处理。而 `count(column)` 适用于统计特定列中的非空值数量。在实际使用时,可以根据情况选择适合的方式。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
104 0
|
7月前
|
关系型数据库 MySQL 数据库
Specified key was too long; max key length is 767 bytes导入mysql数据库表报错
Specified key was too long; max key length is 767 bytes导入mysql数据库表报错
288 0
|
SQL 存储 缓存
【MySQL从入门到精通】【高级篇】(二十四)EXPLAIN中select_type,partition,type,key,key_len字段的剖析
上一篇文章我们介绍了【MySQL从入门到精通】【高级篇】(二十三)EXPLAIN的概述与table,id字段的剖析,重点对EXPLAIN命令进行了阐述,并且对table,id字段进行了剖析。这篇文章接着对EXPLAIN命令的其余字段进行解析,本文将介绍select_type,partition,type,key,key_len 字段的含义。其中:读者朋友们需要重点掌握 select_type,type 两个字段的含义。
265 0
【MySQL从入门到精通】【高级篇】(二十四)EXPLAIN中select_type,partition,type,key,key_len字段的剖析
|
关系型数据库 MySQL 开发者
explain 之key-len 介绍|学习笔记
快速学习 explain 之 key-len 介绍
149 0
explain 之key-len 介绍|学习笔记
|
SQL 关系型数据库 MySQL
explain 之 possible_keys 和 key 介绍|学习笔记
快速学习 explain 之 possible_keys 和 key 介绍
1701 0
|
SQL 存储 关系型数据库
key&key_len&ref&filtered(4)—mysql执行计划(五十)
key&key_len&ref&filtered(4)—mysql执行计划(五十)
|
SQL 关系型数据库 MySQL
FAQ系列 | 解读EXPLAIN执行计划中的key_len
FAQ系列 | 解读EXPLAIN执行计划中的key_len
111 0
|
关系型数据库 MySQL 索引
MySQL添加索引Specified key was too long; max key length is 767 bytes
MySQL添加索引Specified key was too long; max key length is 767 bytes
177 0
|
关系型数据库 MySQL 索引
MYSQL性能调优02_Explain概述、详解id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra列(五)
MYSQL性能调优02_Explain概述、详解id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra列(五)
196 0
MYSQL性能调优02_Explain概述、详解id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra列(五)
|
存储 关系型数据库 MySQL
MYSQL性能调优02_Explain概述、详解id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra列(四)
MYSQL性能调优02_Explain概述、详解id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra列(四)
209 0
MYSQL性能调优02_Explain概述、详解id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra列(四)