【MySql】解读EXPLAIN执⾏计划中的key_len字段⼤⼩的计
算规则
解读EXPLAIN执⾏计划中的key_len
导读
EXPLAIN中的key_len⼀列表⽰什么意思,该如何解读?
EXPLAIN执⾏计划中有⼀列key_len⽤于表⽰本次查询中,所选择的索引长度有多少字节,通常我们可借此判断联合索引有多少列被选择
了。
在这⾥key_len⼤⼩的计算规则是:
a、⼀般地,key_len等于索引列类型字节长度,例如int类型为4-bytes,bigint为8-bytes;
b、如果是字符串类型,还需要同时考虑字符集因素,例如:CHAR(30)UTF8则key_len⾄少是90-bytes;
c、若该列类型定义时允许NULL,其key_len还需要再加1-bytes;
d、若该列类型为变长类型,例如VARCHAR(TEXTBLOB不允许整列创建索引,如果创建部分索引,也被视为动态列类型),其key_len还需要再加2-bytes;
综上,看下⾯⼏个例⼦:
列类型KEY_LEN备注
idintkey_len=
4+1=5
允许NULL,加1-byte
idintnotnullkey_len=4不允许NULL
urchar(30)utf8key_len=
30*3+1
允许NULL
urvarchar(30)not
nullutf8
key_len=
30*3+2
动态列类型,加2-bytes
urvarchar(30)
utf8
key_len=
30*3+2+1
动态列类型,加2-bytes;允许NULL,再加1-
byte
detailtext(10)utf8key_len=
30*3+2+1
TEXT列截取部分,被视为动态列类型,加2-
bytes;且允许NULL
备注:key_len只指⽰了WHERE中⽤于条件过滤时被选中的索引列,是不包含ORDERBY/GROUPBY这部分被选中的索引列。
例如,有个联合索引idx1(c1,c2,c3),3个列均是INTNOTNULL,那么下⾯的这个SQL执⾏计划中,key_len的值是8⽽不是12:
本文发布于:2022-12-07 01:56:26,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/56639.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |