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 @ 2023-05-15 18:07  郭慕荣  阅读(103)  评论(0编辑  收藏  举报