MySQL基础篇--执行计划key_len计算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL基础篇--执行计划key_len计算相关的知识,希望对你有一定的参考价值。

字符类型

char


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

varchar

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


数字类型

TINYINT

TINYINT允许NULL = 1 +1(NULL)
TINYINT不允许NULL = 1

SMALLINT

SMALLINT允许为NULL =2+1(NULL)
SMALLINT不允许为NULL = 2

INT

INT允许为NULL =4+1(NULL)
INT不允许为NULL = 4

BIGINT

BIGINT允许为NULL = 8+1(NULL)
BIGINT不允许为NULL = 8

日期类型

DATETIME

日期时间型的key_len计算:(针对mysql5.5及之前版本)
DATETIME允许为NULL= 8 + 1(NULL)
DATETIME不允许为NULL = 8


日期时间型的key_len计算:(针对mysql5.6.4及之后的版本)
DATETIME允许为NULL= 5 + 1(NULL)
DATETIME不允许为NULL = 5

TIMESTAMP

TIMESTAMP允许为NULL = 4+ 1(NULL)
TIMESTAMP不允许为NULL = 4


decima

根据官方文档可以知道,decimal定义为decimal(M,D),其中,M是总的位数,D是小数点后保留的位数。
小数点前与小数点后的数字分开存储,且以9位数为1组,用4个字节保存,如果低于9位数,需要的字节数如下:

Leftover Digits Number of Bytes
-----------------------------
|0 |0 |
|1-2 |1 |
|3-4 |2 |
|5-6 |3 |
|7-9 |4 |
-----------------------------

例如:
•decimal(20,6)=> 小数点左边14位,小数点右边6位 => 小数点左边分组为5 + 9,需要3个字节+4个字节存储,小数点右边一个分组,需要3个字节存储 => 总共需要10个字节
•decimal(18,9)=> 小数点左边9位数,小数点右边9位数 => 分别使用4个字节存储 => 共需要 8个字节
•decimal(18,2)=> 小数点左边16位数,小数点右边2位数 => 分组为7 + 9,需要8个字节存储,小数点右边1个字节存储 => 共需要9个字节


•decima

以上是关于MySQL基础篇--执行计划key_len计算的主要内容,如果未能解决你的问题,请参考以下文章

MySQL执行计划explain的key_len解析

mysql explain 中key_len的计算

mysql explain key_len是如何计算的?

mysql explain key_len是如何计算的?

mysql explain key_len是如何计算的?

解读EXPLAIN执行计划中的key_len(转)