在 MySQL 中,最好总是允许空值,除非你知道一个字段是必需的,还是总是使用Not Null除非你知道一个字段将包含空值?还是没关系?
我知道在某些 DBMS 中,他们说要Not Null尽可能多地使用,因为允许空值需要每条记录额外的位(或字节?)来存储空状态。
Dav*_*ett 25
在大多数NOT NULL数据库中,由于您陈述的原因,列在存储数据方面会更有效,并且查询和索引也更有效 - 因此,除非您想在列中允许 NULL,否则您应该明确禁止它们。
会有轻微的性能影响,因为NOT NULL可能需要为您使用任何 INSERT 或 UPDATE 影响的每一行检查额外的约束,但由于大多数数据库是相对轻写和重读的,这可能不是问题(小无论如何,花费的额外时间不太可能引起注意,因为它是一个受 CPU 限制的操作,其中插入/更新操作的其余部分将受 IO 限制,因此是一个更重要的瓶颈),它为您提供了一些“免费” " 数据检查,因此您的代码(或其他人的代码)不会意外地将 NULL 放在其他代码不期望它们的地方,因此可能会在它们存在时给出不正确的结果。
编辑:正如彼得在他的评论中指出的那样,以上是一个概括,可能不适用于所有DMBS,但我很确定它适用于 mysql 和 mssql。该领域的其他复杂情况可能包括稀疏表(例如实现的 MSSQL 2008)等特性,这些特性将改变(非)可空列的性能动态。
您应该让您的架构设计和应用程序需求指导这个决定。在大多数情况下,性能差异可能并不明显。