当前位置:Gxlcms > 数据库问题 > 【优化】Mysql字段尽可能用NOT NULL

【优化】Mysql字段尽可能用NOT NULL

时间:2021-07-01 10:21:17 帮助过:23人阅读

  • (5)Null 列需要更多的存储空间:需要一个额外字节作为判断是否为 NULL 的标志位

技术图片

 

alter table table_3 add index idx_user_name (user_name);
alter table table_2 add index idx_user_name (user_name);
explain select * from table_2 where user_name=‘zhaoliu_2_1‘;
explain select * from table_3 where user_name=‘zhaoliu_2_1‘;

技术图片

 

可以看到同样的 varchar(20) 长度,table_2 要比 table_3 索引长度大,这是因为:

两张表的字符集不一样,且字段一个为 NULL 一个非 NULL。

技术图片

 

key_len 的计算规则和三个因素有关:数据类型、字符编码、是否为 NULL 

key_len 62 == 20*3(utf8 3字节) + 2 (存储 varchar 变长字符长度 2字节,定长字段无需额外的字节)

key_len 83 == 20*4(utf8mb4 4字节) +  1 (是否为 Null 的标识) + 2 (存储 varchar 变长字符长度 2字节,定长字段无需额外的字节)

所以说索引字段最好不要为NULL,因为NULL会使索引、索引统计和值更加复杂,并且需要额外一个字节的存储空间。基于以上这些理由和原因,我想咱们不用 Null 的理由应该是够了 :)

 

转自:https://my.oschina.net/leejun2005/blog/1342985

【优化】Mysql字段尽可能用NOT NULL

标签:keyword   启用   ted   possible   额外   字符编码   rest   复合   count   

人气教程排行