面试官:MySQL为什么推荐表字段NOT NULL?
发布网友
发布时间:2024-10-05 15:14
我来回答
共1个回答
热心网友
时间:2024-10-05 16:11
在面试中,面试官常常提及MySQL为何推荐字段使用NOT NULL而非NULL。首先,理解NULL在编程中的困扰,如Java中的NullPointerException,程序员们需要在代码中频繁进行null检查,增加了代码的复杂性和冗余。Java 8引入Optional来缓解这一问题,但MySQL中的NULL处理更为复杂。
尽管在优化文章和书籍中,常强调字段应尽量使用NOT NULL,但往往缺乏详细解释。其实,原因在于NULL字段需要额外空间存储值是否存在,对于MyISAM表,每个多余的NULL字段会占用一个字节。此外,MySQL在处理引用可空列的查询时会遇到困难,索引、统计和值处理会变得复杂,可能导致索引变大,影响查询性能。《高性能MySQL第二版》对此有详细阐述。
尽管有人认为NOT NULL可能占用更多空间,但这并不是主要考虑点。相反,使用有意义的非NULL值能提高代码的可读性和维护性,增强数据规范性。NULL值的更新可能导致索引分裂,而非NULL则避免了这一问题。然而,将NULL改为NOT NULL对性能影响微乎其微,除非确实遇到性能瓶颈,否则不建议作为首选优化手段。特别要注意,timestamp类型和NULL值的配合可能导致问题,以及在使用NOT IN、!=等条件查询时,NULL值会使得结果始终为空。
从存储空间角度看,NULL列需要额外字节来标记其状态。例如,即使两个varchar(20)字段长度相同,一个为NULL的表索引长度会更大,这与数据类型、字符编码和NULL值有关。因此,为了简化索引处理和节省空间,推荐在设计表结构时避免使用NULL字段。
综上所述,尽管NULL在某些情况下显得方便,但从性能、代码可读性和存储效率的角度考虑,选择NOT NULL是更明智的选择。来源:cnblogs.com/myJuly/p/13...