共计 1139 个字符,预计需要花费 3 分钟才能阅读完成。
本篇文章给大家分享的是有关 MySQLexplain 中 key_len 怎样计算,丸趣 TV 小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着丸趣 TV 小编一起来看看吧。
MySQL explain 中 key_len 的计算
key_len 表示索引使用的字节数,根据这个值可以判断索引的使用情况,特别是在组合索引的时候,判断该索引有多少部分被使用到非常重要。
在计算 key_len 时,下面是一些需要考虑的点:
索引字段的附加信息:
1. 可以分为变长和定长数据类型讨论;
2. 当索引字段为定长数据类型时,如 char,int,datetime,需要有是否为空的标记,这个标记占用一个字节(对于 not null 来说不需要这一个字节);
3. 当索引字段为变长数据类型时,如 varchar,除了是否为空的标记外,还需要有长度信息,需要占用两个字节;
4. 对于 char,varchar,blob,text 等,key_len 的长度还和字符集有关,latin1 一个字符占用一个字节,gbk 一个字符占用两个字节,utf8 一个字符占用三个字节
例如:
列类型 KEY_LEN 备注
id int key_len = 4+1 int 为 4bytes, 允许为 NULL, 加 1byte
id bigint not nullkey_len=8 bigint 为 8bytes
user char(30) utf8key_len=30*3+1 utf8 每个字符为 3bytes, 允许为 NULL, 加 1byte
user varchar(30) not null utf8key_len=30*3+2utf8 每个字符为 3bytes, 变长数据类型, 加 2bytes
user varchar(30) utf8key_len=30*3+2+1utf8 每个字符为 3bytes, 允许为 NULL, 加 1byte, 变长数据类型, 加 2bytes
detail text(10) utf8key_len=30*3+2+1 TEXT 截取部分, 被视为动态列类型
备注:
key_len 只表示了 where 中用于条件过滤时被选中的索引列,是不包含 order by / group by 这一部分被选中的索引列的。
例如:
有一个联合索引 idx(a1,b2,c3),三列均是 int not null,那么下面的执行计划中 key_len 的值是 8,不是 12
select …. from table where c1=?and c2=?order by c1;
以上就是 MySQLexplain 中 key_len 怎样计算,丸趣 TV 小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注丸趣 TV 行业资讯频道。