MySQL基础篇--执行计划key_len计算
推荐
原创
©著作权归作者所有:来自51CTO博客作者进击的CJR的原创作品,请联系作者获取转载授权,否则将追究法律责任
字符类型
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