【问题标题】:SQL Server Is zero value 0.00 preferable then NULL?SQL Server 零值 0.00 比 NULL 更可取吗?
【发布时间】:2012-07-07 13:49:57
【问题描述】:

只是一个一般性问题。数据库保留值还是 NULL 更好?

我有一个佣金字段,每天计算并基于总金额值条件。下一个日期的佣金计算上一个并与总值相加。佣金也可以是 0.00,但不是负数。保持零值或将它们填充为 NULL 并在查询中使用 'ISNULL(comm, 0)' 而只是 'comm' 会更好吗?

性能和数据库容量哪个更好?

UPD:性能刚刚好。我想知道当您每天有数百条用户记录时,存储容量是否有差异? NULL as EMPTY 真的是 EMPTY 还是当存储值 0.00 小于 NULL 本身时需要一些字节。

【问题讨论】:

  • NULL 通常表示“没有有意义的价值”。 0.00 听起来在您的场景中是一个有意义的值。
  • 关于性能容量 - 如果表少于一百万行,则您有一个小表,而大表可能从 1 亿开始。在这里变得真实 - 几年前,我的智能手机能够处理每天几百行。

标签: sql-server performance tsql


【解决方案1】:

如果佣金值为0,则应保持为0,不为NULL。为什么要调用ISNULL 函数再次将其转换回0?这是错误的,它会让未来的程序员处理你的代码,坐下来思考 2 天为什么会这样设计。

保持简单和干净。使用 0。

来自msdn

NULL 值表示该值未知。 NULL 值 不同于空值或零值。

【讨论】:

    【解决方案2】:

    可空列通常使用一个额外的位来标记空值。记录某物是“空”的事实仍然是必须以某种形式编码的信息。显然,这涉及存储和处理。由于行在页面中的布局方式,存储组件仍然可能并不重要。无论哪种方式,这都不是您最重要的考虑因素。

    您将不得不编写 ISNULL 检查每次您引用该列。这可能会使索引的使用复杂化。你会厌倦打字的。

    如果你的意思是零,那么就以这种方式存储它;一切都简单得多。保存用于在 DDL 中显式声明“NULL”和“NOT NULL”列定义的击键。

    【讨论】:

      【解决方案3】:

      NULL 真正表示 NULL,0 表示已知值为零。我怀疑性能上有什么不同,但这只是在合适的地方使用正确的变量的一般编程逻辑

      【讨论】:

      • 性能没有区别?在每个查询中使用ISNULL(comm, 0) 时?
      • 我相信你是调用 ISNULL 还是做 x>0?该值必须被访问一次。isnull 函数是一个内联函数。它应该很快。一个小测试用例可能证明我错了
      • 性能刚刚好。我想知道当您每天有数百条用户记录时,存储容量是否有差异? NULL as EMPTY 真的是 EMPTY 还是当存储值 0.00 小于 NULL 本身时需要一些字节。
      • 这取决于我猜的列的数据类型。 int 通常是 4 个字节。 NULL 可以使用宏定义,可以优化为仅占用 1 个字节。但是从常识方面来说,我会使用 0 来做,因为它表示佣金的实际价值。如果你想进一步深入这个话题。创建 2 个数据库,每个数据库都有一个表。它包含 NULL 或 0。用 1 亿个条目或其他内容填充每个表并比较大小
      【解决方案4】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-27
        • 2012-09-10
        • 2021-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多