我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql explain中key_len的含义以及计算方法是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql explain中key_len的含义以及计算方法是什么

这篇文章主要为大家展示了“mysql explain中key_len的含义以及计算方法是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql explain中key_len的含义以及计算方法是什么”这篇文章吧。

前言

在Mysql中执行explain的结果中有一列为key_len,那么key_len的含义是什么呢?

key_len:表示索引使用的字节数,根据这个值可以判断索引的使用情况,特别是在组合索引的时候,判断该索引有多少部分被使用到非常重要。

计算key_len注意事项:

  • 索引字段的附加信息: 可以分为变长和定长数据类型讨论,当索引字段为定长数据类型时,如char,int,datetime,需要有是否为空的标记,这个标记占用1个字节(对于not null的字段来说,则不需要这1字节);对于变长数据类型,比如varchar,除了是否为空的标记外,还需要有长度信息,需要占用两个字节。

  • 对于,char、varchar、blob、text等字符集来说,key len的长度还和字符集有关,latin1一个字符占用1个字节,gbk一个字符占用2个字节,utf8一个字符占用3个字节。

举例说明:

列类型KEY_LEN备注
id intkey_len = 4+1int为4bytes,允许为NULL,加1byte
id bigint not nullkey_len=8bigint为8bytes
user char(30) utf8key_len=30*3+1utf8每个字符为3bytes,允许为NULL,加1byte
user varchar(30) not null utf8key_len=30*3+2utf8每个字符为3bytes,变长数据类型,加2bytes
user varchar(30) utf8key_len=30*3+2+1utf8每个字符为3bytes,允许为NULL,加1byte,变长数据类型,加2bytes
detail text(10) utf8key_len=30*3+2+1TEXT截取部分,被视为动态列类型。

备注:key_len只指示了where中用于条件过滤时被选中的索引列,是不包含order by/group by这一部分被选中的索引列的。

例如,有个联合索引idx(c1,c2,c3),3列均是int not null,那么下面的SQL执行计划中,key_len的值是8而不是12:

select ... from tb where c1=? and c2=? order by c1;

示例

下面以具体的示例来进行说明,表结构:

CREATE TABLE `t4` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `a` int(11) NOT NULL DEFAULT '0',  `b` int(11) NOT NULL DEFAULT '0',  `c` int(11) NOT NULL DEFAULT '0',  PRIMARY KEY (`id`),  KEY `index1` (`a`,`b`)) ENGINE=InnoDB;

执行explain的结果如下:

mysql> explain select * from t4 where a =0 and b > 0;+----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+| id | select_type | table | type  | possible_keys | key    | key_len | ref  | rows | Extra       |+----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+|  1 | SIMPLE      | t4    | range | index1        | index1 | 8       | NULL |    1 | Using where |+----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+mysql> explain select * from t4 where a > 0 and b = 0;+----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+| id | select_type | table | type  | possible_keys | key    | key_len | ref  | rows | Extra       |+----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+|  1 | SIMPLE      | t4    | range | index1        | index1 | 4       | NULL |    1 | Using where |+----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+

可以看到a=0&b>0 和 a>0&b=0 explain的结果“几乎“相同,都用到索引index1,都是range这个索引(即对索引区间扫描)得到的结果。唯一不同的是key_len。key_len说明了查找时用到的索引长度,可以根据长度,推测多维索引用到了几维。(MySQL索引都是前缀索引)

index1是二维索引KEY index1 (a,b),因此长度应该是4+4。

a=0&b>0 key_len是8,说明仅仅用到了索引就能得到结果,先用a=0找到树节点,然后在其下面根据b>0过滤,得到结果。即”完全“用到索引就能得到结果。

a>0&b=0 key_len是4,说明仅仅用到了前缀索引的第一维,仅仅用a>0得到结果(主键),然后去主键索引(聚簇索引)里面读取整个行,根据b=0过滤相关数据,得到结果。即“不完全”用到索引才能得到结果。

以上是“mysql explain中key_len的含义以及计算方法是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql explain中key_len的含义以及计算方法是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql explain中key_len的含义以及计算方法是什么

这篇文章主要为大家展示了“mysql explain中key_len的含义以及计算方法是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql explain中key_len的含义以及计算
2023-06-29

MySQL explain中列的取值方法及含义是什么

这篇文章主要介绍“MySQL explain中列的取值方法及含义是什么”,在日常操作中,相信很多人在MySQL explain中列的取值方法及含义是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL
2023-07-05

python中class(object)的含义是什么以及用法

这篇文章主要介绍了python中class(object)的含义是什么以及用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-03

JavaScript中.?、??、??=的用法及含义是什么

今天小编给大家分享一下JavaScript中.?、??、??=的用法及含义是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧
2023-06-29

vue中$的含义及用法是什么

这篇文章主要讲解了“vue中$的含义及用法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue中$的含义及用法是什么”吧!这些只是Vue的命名规则,为了区分普通变量属性,避免我们自己声
2023-07-06

MySQL中“SELECT”语句的含义是什么以及如何使用它?

SELECT命令用于从MySQL数据库中获取数据。您可以在 mysql> 提示符以及任何脚本(例如 PHP)中使用此命令。语法以下是从 MySQL 表中获取数据的 SELECT 命令的通用语法 - p>SELECT field1, fiel
2023-10-22

mysql索引的优劣势是什么以及使用方法

本篇内容主要讲解“mysql索引的优劣势是什么以及使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql索引的优劣势是什么以及使用方法”吧!一、索引的优劣势优点:可以快速的检索 、可
2023-06-08

Vue中使用计算属性的方法是什么

这篇文章主要介绍“Vue中使用计算属性的方法是什么”,在日常操作中,相信很多人在Vue中使用计算属性的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue中使用计算属性的方法是什么”的疑惑有所帮助!
2023-06-21

计算机网络中源程序、目标程序、可执行程序的含义是什么

这篇文章给大家分享的是有关计算机网络中源程序、目标程序、可执行程序的含义是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。源程序:指未编译的,按照一定的程序设计语言规范书写的文本文件。目标程序:指源程序经编译可
2023-06-14

Python中numpy数组的计算与转置的方法是什么

本篇内容介绍了“Python中numpy数组的计算与转置的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、numpy数组与数的运
2023-06-21

Python中的装饰器是什么以及运作方法介绍

这篇文章主要介绍“Python中的装饰器是什么以及运作方法介绍”,在日常操作中,相信很多人在Python中的装饰器是什么以及运作方法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中的装饰器是什
2023-06-07

计算机中文件重命名的四种方法是什么

这篇文章给大家分享的是有关计算机中文件重命名的四种方法是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。方法是:1、选中指定文件,鼠标单击文件,修改名称即可;2、选中指定文件,按键盘上”键 ,修改名称即可;3、
2023-06-15

计算 go.sum 文件中的模块校验和的方法是什么?

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《计算 go.sum 文件中的模块校验和的方法是什么?》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一
计算 go.sum 文件中的模块校验和的方法是什么?
2024-04-04

Mysql中自定义函数的创建和执行方法是什么

本文小编为大家详细介绍“Mysql中自定义函数的创建和执行方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mysql中自定义函数的创建和执行方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Mys
2023-03-13

Win7系统中优化计算机服务功能的方法是什么

今天就跟大家聊聊有关Win7系统中优化计算机服务功能的方法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在win7系统中,有一项名为服务的功能。通过启动和关闭服务,可以达到管理
2023-06-28

编程热搜

目录