返回顶部
首页 > 资讯 > 数据库 >mysql explain中key_len的含义以及计算方法
  • 762
分享到

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

2024-04-02 19:04:59 762人浏览 八月长安
摘要

目录前言计算key_len注意事项:示例总结前言 在Mysql中执行explain的结果中有一列为key_len,那么key_len的含义是什么呢? 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的含义以及计算方法的文章就介绍到这了,更多相关mysql explain中key_len计算内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: mysql explain中key_len的含义以及计算方法

本文链接: https://lsjlt.com/news/140901.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mysql explain中key_len的含义以及计算方法
    目录前言计算key_len注意事项:示例总结前言 在Mysql中执行explain的结果中有一列为key_len,那么key_len的含义是什么呢? key_len:表示索引使用的字...
    99+
    2024-04-02
  • mysql explain中key_len的含义以及计算方法是什么
    这篇文章主要为大家展示了“mysql explain中key_len的含义以及计算方法是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql explain中key_...
    99+
    2023-06-29
  • MySQL explain中列的取值方法及含义是什么
    这篇文章主要介绍“MySQL explain中列的取值方法及含义是什么”,在日常操作中,相信很多人在MySQL explain中列的取值方法及含义是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-07-05
  • MySQL 中,EXPLAIN执行计划的type含义
    执行计划中的 type 字段表示 MySQL 在执行查询时使用的访问类型,也就是 MySQL 在访问表时使用的算法。 以下是 MySQL 中常见的 type 类型及其含义: system:这是最高级别的访问类型,表示 MySQL 只有一行...
    99+
    2023-10-23
    mysql
  • explain执行计划中key_len计算规则是怎么样的
    小编给大家分享一下explain执行计划中key_len计算规则是怎么样的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • MySQL explain 中列的取值及含义讲解
    目录前言refrowsfilteredextra补充: 简单阐述索引下推补充:group by 优化掉额外的排序操作前言 今天看 《mysql 是怎样允许的》和 《高性能MySQL》索引相关的部分,觉得有必要整理下 ex...
    99+
    2023-03-21
    MySQL explain列的取值及含义 MySQL explain列
  • python中 @的含义以及基本使用方法
    目录一、表示修饰符。二、表示矩阵乘法。总结一、表示修饰符。 可以在模块或者类的定义层内对函数进行修饰。出现在函数定义的前一行,不允许和函数定义在同一行。 一个修饰符就是一个函数,它将...
    99+
    2024-04-02
  • 聊聊JavaScript中.?、??、??=的用法以及含义
    目录前言可选链(.)空值合并运算符()空值赋值运算符(=)趣味问答时间:值得注意的是 : 是忽视 null ,undefined 等错误的值最后前言 在项目中我们往往要做很多很多的空...
    99+
    2024-04-02
  • linux cd的含义以及用法
    linux cd是什么意思? linux中cd的意思是change directory即切换目录。 Linux cd命令用于切换当前工作目录至 dirName(目录参数)。 其中 dirName 表示法可为绝对klOzg...
    99+
    2022-06-04
    linux cd
  • 异步的含义以及JavaScript异步编程的方法
    本篇内容主要讲解“异步的含义以及JavaScript异步编程的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“异步的含义以及JavaScript异步编程的方法...
    99+
    2024-04-02
  • python中class(object)的含义是什么以及用法
    目录python class(object)的含义class, class()和class(object)的区别为什么要继承object类class, class()和class(o...
    99+
    2023-02-03
    python class python object python class(object)
  • MySQL执行计划中的各个参数及含义是什么
    本篇文章给大家分享的是有关MySQL执行计划中的各个参数及含义是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧...
    99+
    2024-04-02
  • python方差检验的含义及用法
    说明 方差检验是用来比较两个或多个变量数据的样本,以确定它们之间的差异是简单随机的,或者是由于过程之间的显著统计差异造成的。 自变量X是一种离散数据,自变量Y是一种连续数据(x可以是多种类型),如果数据正态分布,方差...
    99+
    2022-06-02
    python 方差检验
  • MySQL中“SELECT”语句的含义是什么以及如何使用它?
    SELECT命令用于从MySQL数据库中获取数据。您可以在 mysql> 提示符以及任何脚本(例如 PHP)中使用此命令。语法以下是从 MySQL 表中获取数据的 SELECT 命令的通用语法 - p>SELECT field1, ...
    99+
    2023-10-22
  • Pandas 数据中的loc与iloc含义以及操作
            本节学习并记录pandas 的DataFrame类型的数据是怎么对列或者行进行操作的 df.loc: 语法格式是df.loc[, ],如果列不传将返回所有的行,loc操作通过索引和列的条件筛选出数据。 df.iloc: 语法...
    99+
    2023-09-30
    pandas python
  • Python中赋值运算符的含义与使用方法
    目录引言一、赋值运算符含义:二、赋值运算符写法:2.1单个变量赋值2.2多个变量赋值2.3 多变量赋值相同值附:扩展后的赋值运算符总结引言 在Python中但凡提到的赋值运算符其实讲...
    99+
    2024-04-02
  • 如何理解MySQL执行计划中的各个参数及含义
    这篇文章给大家介绍如何理解MySQL执行计划中的各个参数及含义,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。本文是对于MySQL执行计划的解析,主要解释了...
    99+
    2024-04-02
  • JavaScript中.?、??、??=的用法及含义是什么
    今天小编给大家分享一下JavaScript中.、、=的用法及含义是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。可选链(...
    99+
    2023-06-29
  • vue中$的含义及用法是什么
    这篇文章主要讲解了“vue中$的含义及用法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue中$的含义及用法是什么”吧!这些只是Vue的命名规则,为了区分普通变量属性,避免我们自己声...
    99+
    2023-07-06
  • MySQL中explain语句的使用方法
    小编给大家分享一下MySQL中explain语句的使用方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、概述在 MySQL 中,我们可以使用慢查询日志或者 s...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作