一尘不染

默认为 NULL 还是 NOT NULL?

mysql

在 MySQL 中,除非您知道某个字段是必需的,否则总是允许空值,或者Not Null除非您知道一个字段将包含空值,否则总是使用它会更好吗?还是没关系?

我知道在一些 DBMS 中他们说要Not Null尽可能多地使用,因为允许空值需要每条记录额外的位(或字节?)来存储空状态。


阅读 82

收藏
2022-10-10

共1个答案

一尘不染

在大多数NOT NULL数据库中,由于您声明的原因,列在存储数据方面会更有效,并且查询和索引也更有效 - 因此,除非您想在列中允许 NULL,否则您应该明确禁止它们。

会有轻微的性能影响,因为NOT NULL可能需要检查您使用任何 INSERT 或 UPDATE 影响的每一行的额外约束,但由于大多数数据库是相对轻写和重读,这可能不是问题(小无论如何,花费的额外时间不太可能引起注意,因为它是一个受 CPU 限制的操作,其中其余的插入/更新操作将受 IO 限制,因此是一个更重要的瓶颈)并且它为您提供了一些“免费” 数据检查,因此您的代码(或其他人的代码)不会意外地将 NULL 放在其他代码不期望它们的位置,因此可能会在它们存在时给出不正确的结果。

编辑:正如彼得在他的评论中指出的那样,以上是一个普遍性,可能并不适用于所有DMBS,尽管我很确定它适用于 mysql 和 mssql。该领域的其他复杂情况可能包括稀疏表(例如,在 MSSQL 2008 中实现的)之类的特性,这些特性将改变(非)可空列的性能动态。

2022-10-10