Explain执行计划key_len详解

我们在使用Explain查看SQL执行计划时,其中有一列为key_ken

EXPLAIN select * FROM user WHERE id = 1;

key_len表示使用的索引长度,key_len可以衡量索引的好坏,key_len越小 索引效果越好,那么key_len的长度是如何计算的?
常见的列类型长度计算:

复制代码
CREATE TABLE `user` (
  `id` bigint(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) DEFAULT NULL,
  `age` int(2) DEFAULT NULL,
  `sex` char(1) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_name` (`name`),
  KEY `idx_age` (`age`),
  KEY `idx_sex` (`sex`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
复制代码

id字段类型为bigint,长度为8,id为主键,不允许Null ,key_len = 8。

EXPLAIN select * FROM user WHERE id = 1;

name的字段类型是varchar(10),允许Null,字符编码是utf8,一个字符占用3个字节,varchar为动态类型,key长度加2,key_len = 10 * 3 + 2 + 1 = 33 。

EXPLAIN select * FROM user WHERE name = '张三';

age的字段类型是int,长度为4,允许Null ,key_len = 4 + 1 = 5 。

EXPLAIN select * FROM user WHERE age = 19;

sex的字段类型是char(1),允许Null ,字符编码是utf8,一个字符占用3个字节,key_len = 1 * 3 + 1 = 4 。

EXPLAIN select * FROM user WHERE sex = '1';

参考文档:https://blog.csdn.net/zhangchaoyang/article/details/109501696

posted @   郭慕荣  阅读(123)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2021-05-15 为什么要“三次握手,四次挥手”
2021-05-15 详解TCP连接的“三次握手”与“四次挥手”(下)
点击右上角即可分享
微信分享提示