MySQLexplain中key

61次阅读
没有评论

共计 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 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-28发表,共计1139字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)