mysql 索引 explain 字节长度计算

2021/8/25 19:07:36

本文主要是介绍mysql 索引 explain 字节长度计算,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

CREATE TABLE `employees` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(24) NOT NULL DEFAULT '' COMMENT '姓名',
  `age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄',
  `position` varchar(20) NOT NULL DEFAULT '' COMMENT '职位',
  `hire_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入职时间',
  PRIMARY KEY (`id`),
  KEY `idx_name_age_position` (`name`,`age`,`position`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='员工记录表';

INSERT INTO employees(name,age,position,hire_time) VALUES('LiLei',22,'manager',NOW());
INSERT INTO employees(name,age,position,hire_time) VALUES('HanMeimei', 23,'dev',NOW());
INSERT INTO employees(name,age,position,hire_time) VALUES('Lucy',23,'dev',NOW());

EXPLAIN SELECT * FROM employees WHERE name= 'LiLei';

key_len长度计算 varchar定义24 因此sql中74等于=24*3+2 具体可参考如下说明

key_len只计算where条件用到的索引长度,而排序和分组就算用到了索引,也不会计算到key_len中。

计算key_len的公式:

varchr(10)变长字段且允许NULL = 10 * ( character set:utf8=3,gbk=2,latin1=1) + 1(NULL) + 2(变长字段)

varchr(10)变长字段且不允许NULL = 10 *( character set:utf8=3,gbk=2,latin1=1) + 2(变长字段)

char(10)固定字段且允许NULL = 10 * ( character set:utf8=3,gbk=2,latin1=1)+1(NULL)

char(10)固定字段且不允许NULL = 10 * ( character set:utf8=3,gbk=2,latin1=1)

不同的字符所占的字节是不同的。:

  • ASCII码:
    一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。如一个ASCII码就是一个字节。

  • UTF-8编码:
    一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。

  • Unicode编码:
    一个英文等于两个字节,一个中文(含繁体)等于两个字节。

参考文献 https://www.cnblogs.com/wangkongming/p/11675707.html

 

 



这篇关于mysql 索引 explain 字节长度计算的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程