美文网首页运维倒计时
key_len长度计算【转】

key_len长度计算【转】

作者: Darui30 | 来源:发表于2019-06-11 18:16 被阅读0次

有时候会被问到key_len相关的东西,记得不太清楚了,查看叶大神blog,发现最近比较难打开,抄一抄了。如有冒犯请连续,必删除。
叶大神的原文连接

EXPLAIN执行计划中有一列 key_len 用于表示本次查询中,所选择的索引长度有多少字节,通常我们可借此判断联合索引有多少列被选择了。

在这里 key_len 大小的计算规则是:

  • 一般地,key_len 等于索引列类型字节长度,例如int类型为4-bytes,bigint为8-bytes;
  • 如果是字符串类型,还需要同时考虑字符集因素,例如:CHAR(30) UTF8则key_len至少是90-bytes;
  • 若该列类型定义时允许NULL,其key_len还需要再加 1-bytes;
  • 若该列类型为变长类型,例如 VARCHAR(TEXT\BLOB不允许整列创建索引,如果创建部分索引,也被视为动态列类型),其key_len还需要再加 2-bytes;

综上,看下面几个例子:

列类型 key_len 备注
id int key_len = 4+1 = 5 允许NULL,加1-byte
id int not null key_len = 4 不允许NULL
user char(30) utf8 key_len = 30*3+1 允许NULL
user varchar(30) not null utf8 key_len = 30*3+2 动态列类型,加2-bytes
user varchar(30) utf8 key_len = 30*3+2+1 动态列类型,加2-bytes;允许NULL,再加1-byte
detail text(10) utf8 key_len = 30*3+2+1 TEXT列截取部分,被视为动态列类型,加2-bytes;且允许NULL

备注,key_len 只指示了WHERE中用于条件过滤时被选中的索引列,是不包含 ORDER BY/GROUP BY 这部分被选中的索引列。
例如,有个联合索引 idx1(c1, c2, c3),3个列均是INT NOT NULL,那么下面的这个SQL执行计划中,key_len的值是8而不是12:

SELECT…WHERE c1=? AND c2=? ORDER BY c1;

相关文章

  • key_len长度计算【转】

    有时候会被问到key_len相关的东西,记得不太清楚了,查看叶大神blog,发现最近比较难打开,抄一抄了。如有冒犯...

  • 执行计划

    key_len 表示索引使用的字节数,可通过计算查询中使用的索引长度。不损失精度准确性情况下,越短越好 显示的是值...

  • 3:索引最佳实践(常用)

    建表语句 回顾上节(key_len的计算): 1:全值匹配(联合索引) 2:最左前缀法则(联合索引) 3:存储引擎...

  • java hashmap

    hashmap结构 数组下标计算 当数组长度正好是 2的n次方时。即,当数组长度正好是 2的n次方时,%运算可以转...

  • IOS计算字符串字节长度

    计算字符串字节长度:方法一 计算字符串字节长度:方法二

  • 计算长度

  • 计算音频长度

    在工程中连接CoreMedia和AVFoundation框架

  • 计算CDS长度

    下载TCGA 基因注释文件:gencodev22https://gdc.cancer.gov/about-data...

  • 计算基因长度

    用在转录组RPKM计算上1载入GTF文件 2通过exonsBy获取每个gene上的所有外显子的起始位点和终止位点,...

  • fastq长度计算

    python shell And

网友评论

    本文标题:key_len长度计算【转】

    本文链接:https://www.haomeiwen.com/subject/askcfctx.html