NULL 与 NOT NULL 性能差异

Ber*_*ers 3 sql sql-server performance null

最近我正在查看我们拥有的 SQL 表并注意到以下内容。

    [FooColumn] CHAR (1) DEFAULT ('N') NOT NULL,
Run Code Online (Sandbox Code Playgroud)

在上面你可以看到 FooColumn 将始终默认为 'N' 但仍然指定了“NOT NULL”。

将列设置为“NOT NULL”而不是“NULL”是否会存在一些存储/性能差异?

SQL Server 如何处理“NOT NULL:与“NULL”列不同?

注意:这仅适用于 SQL,而不是外部执行 NULL 检查的开销

Gan*_*er7 7

只有在有原因时才应该使用 NOT NULL(即 UI 或后端关系的必填字段)。NOT NULL 与 NULL 的性能可以忽略不计,根据2016 年的这篇文章 (SQL SERVER),在决定 NOT NULL 与 NULL 时不应考虑性能。

即使该字段将默认为“N”,如果允许空值,命令仍然可以将其设置为 NULL。归结为 NULL 是该列的有效数据。

编辑

在数据驱动的技术应用程序中,根据我的经验,以下是我们使用的一些准则:

  • 对于数字字段,用户不知道 NULL,所有数字都有意义。
  • 对于字符串字段,NULL 和 "" 与用户相同,因此这取决于您的后端应用程序。
  • 我知道您的问题不包括 ISNULL 检查,但是如果您进行了很多检查,那么可能会产生一种代码气味,即这些字段应该不是 NULL,因为它们可能会变得昂贵。

  • 我们有数字字段,负数、0 或正数都是有效的技术数据。虽然初始保存时不需要数据,但可以稍后输入。在这个业务案例中,它是有效的,因为数据在他们输入之前是未知的,并且没有有效的替代品。 (2认同)