MySQL Explain中key_len的计算

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

通常在优化SQL查询的时候,我们都会使用explain分析SQL执行计划,通常来说当用到组合索引的时候我们如何判断索引完全用上呢?当然高手看看表结构及SQL语句就知道到底用到了几个字段,对于不熟悉的同学呢?我们还是可以看看key_len的长度,当然这个计算还是有点复杂的,下面我们来谈谈explain key_len如何计算的。


a.表结构如下:

CREATE TABLE keylen_cal (
  id int(10) NOT NULL,
  tel int(10) DEFAULT NULL,
  first_name varchar(10) NOT NULL,
  last_name varchar(10) DEFAULT NULL,
  father char(10) NOT NULL,
  mother char(10) DEFAULT NULL,  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
b.插入数据
insert into keylen_cal values (1,111,'A','AA','AAA','AAAA');
insert into keylen_cal values (2,222,'B','BB','BBB','BBBB');
insert into keylen_cal values (3,333,'C','CC','CCC','CCCC');
insert into keylen_cal values (4,444,'D','DD','DDD','DDDD');
c创建索引
alter table keylen_cal add index idx_id(id);
alter table keylen_cal add index idx_tel(tel);
alter table keylen_cal add index idx_fn(first_name);
alter table keylen_cal add index idx_ln(last_name);
alter table keylen_cal add index idx_father(father);
alter table keylen_cal add index idx_mother(mother);


d.测试每个key_len的长度

explain select * from keylen_cal where id=3;
##id int(10) NOT NULL,
key_len=4

explain select * from keylen_cal where tel=33;
##tel int(10) DEFAULT NULL,
key_len=5=4+1

alter table keylen_cal modify id(100) NOT NULL;
explain select * from keylen_cal where id=3;
key_len=4

explain select * from keylen_cal where first_name='C'
##first_name varchar(10) NOT NULL,
key_len=32=10*3+2 (utf8占用三个字节)

explain select * from keylen_cal where last_name='CC'
##last_name varchar(10) DEFAULT NULL,
key_len=33=10*3+2+1

explain select * from keylen_cal where father='CCC'
##father char(10) NOT NULL
key_len=30=3*10

explain select * from keylen_cal where mother='CCCC'
##mother char(10) DEFAULT NULL
key_len=31=3*10+1

通过上面的一系列实验,可以总结出来如下规律

  1. 通常情况下, key_len=字段字符数*字符集每个字符所占字节数

  2. default null ,会使 key_len+1

  3. 变长的字段如varchar,会使key_len+2

  4. int ,key_len=4

  5. bigint, key_len=8



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL版标准版计算节点规格详解
PolarDB MySQL版标准版计算节点规格详解
118 1
|
1月前
|
SQL 缓存 关系型数据库
MySQL的万字总结(缓存,索引,Explain,事务,redo日志等)
MySQL的万字总结(缓存,索引,Explain,事务,redo日志等)
66 0
|
1月前
|
关系型数据库 MySQL
Mysql基础第十三天,创建计算字段
Mysql基础第十三天,创建计算字段
19 0
|
2月前
|
SQL 存储 关系型数据库
Mysql内核查询成本计算
Mysql内核查询成本计算
|
2月前
|
存储 关系型数据库 MySQL
MySQL技能完整学习列表6、查询优化——1、EXPLAIN命令的使用——2、索引优化
MySQL技能完整学习列表6、查询优化——1、EXPLAIN命令的使用——2、索引优化
22 0
|
2月前
|
SQL 存储 关系型数据库
MySQL - Explain详解
MySQL - Explain详解
|
3月前
|
SQL 关系型数据库 MySQL
MySQL SQL性能分析 慢查询日志、explain使用
MySQL SQL性能分析 慢查询日志、explain使用
101 0
|
3月前
|
SQL 机器学习/深度学习 关系型数据库
MySQL - Explain深度剖析
MySQL - Explain深度剖析
43 0
|
4月前
|
SQL 关系型数据库 MySQL
mysql explain 详解及sql优化指南
mysql explain 详解及sql优化指南
31 0
|
16天前
|
关系型数据库 MySQL 数据库
mysql卸载、下载、安装(window版本)
mysql卸载、下载、安装(window版本)