haxianhe's blog

为什么MySQL字段要设置为NOT NULL?

字数统计: 285阅读时长: 1 min
2020/05/16 Share

平时开发过程中,MySQL 字段的一般都会设置为NOT NULL,原因如下:

1、空值(“”) 和 “NULL” 的区别:

  1. 空值是不占用空间的
  2. MySQL中的NULL其实是占用空间的

NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.

所谓的NULL就是什么都没有,连\0都没有,\0在字符串中是结束符,但是在物理内存是占空间的,等于一个字节,而NULL就是连这一个字节都没有。

2、不利于查询优化

如果查询中包含可为NULL的列,对MySQL来说更难优化,因为可为NULL的列会使索引、索引统计和值比较都更复杂。

当可为NULL的列被索引时,每个索引记录需要一个额外的字节,在MyISAM里面甚至可能导致固定大小的索引(例如只有一个整数列的索引)变成可变大小的索引。

参考资料:

CATALOG