| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> MySQL的执行计划key_len -> 正文阅读 |
|
[大数据]MySQL的执行计划key_len |
key_len的含义参考mysql 8.0官方文档的解释:https://dev.mysql.com/doc/refman/8.0/en/explain-output.html key_len是explain输出字段中的一列。 含义是:The length of the chosen key,所选键的长度。其单位是字节。 key_len的作用根据这个值,就可以判断索引使用情况。比如当key_len列显示为NULL时,key列也就会显示为NULL, 说明语句没有用到索引。比如在使用组合索引的时候,判断是否所有的索引字段是否都被用到。 如何根据key_len的值判断是否所有的索引字段都被用到,就要知道key_len的计算规则。 key_len 计算规则1.可以为NULL的列的key长度比非NULL列的key长度大1。 ? 看个例子,有一张表a_test,其表结构如所示:
可以看到表a_test,有两个普通索引idx_server_id和idx_user_id。server_id的字段类型是int,有not null约束。user_id的字段类型是int,没有not null约束,默认值是null。 我们来看下分别使用这两个索引时,key_len的值。
如上所示,当使用idx_user_id索引时,key_len的值是5(int类型长度4+1),而使用idx_server_id索引时,key_len的值是4(仅为int类型长度4)。 2.如果索引列是字符型字段,则索引列数据类型本身占用空间跟字符集有关。 不同的字符集下,同一个字符存储到表中的时候,它所占用的空间大小是不同的。一个字符存储在表中,到底占用多少个字节byte,需要根据不同的字符集来分别计算。 常用的几种字符集下,字符character和字节byte的换算关系如下:
注:latin1字符集编码下,不支持插入中文字符。 所以CHAR(M)类型占用空间为M * Maxlen?。 验证一下: 3. 如果索引列是变长的(比如varchar),则在索引列数据类型本身占用空间的基础上再加2。 我们把上面的char类型替换成varchar。 看个组合索引的例子我有一张表kill_log。
查看如下语句的执行计划。
其输出的执行计划如下: key_len为265。 我们来分析下这个265怎么算出来的吧。
把查询语句db的条件去掉。
再看下执行计划。 此时查询只用到了组合索引中的第一个字段timestamp,长度为6。 参考文档: https://blog.csdn.net/javaanddonet/article/details/111992505 https://www.modb.pro/db/52861 关注我,和我一起拯救吧! ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/16 6:50:01- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |