【问题标题】:SQL Server NUMERIC/DECIMAL precision vs storageSQL Server NUMERIC/DECIMAL 精度与存储
【发布时间】:2012-07-19 02:59:21
【问题描述】:

考虑到MSDN 对 NUMERIC/DECIMAL 精度的 SQL Server 2008 R2 存储的陈述。

1 到 9 的精度为 5 个字节
10 到 19 的精度为 9 个字节

因此,如果我的业务案例在逻辑上需要具有 2 位小数和 5 位精度的数据类型,那么如果我将其定义为 NUMERIC(5, 2)NUMERIC(9, 2)

一个考虑到我故意忽略的是隐含的检查约束,因为我很可能会在限制实际允许范围的列上放置一个实际的检查约束。

这对索引、查询性能或系统的任何其他方面有影响吗?

【问题讨论】:

  • NUMERIC 不能确保插入/更新的值中存在小数位。
  • 使用 sum() 测试溢出。

标签: sql-server database-design data-structures


【解决方案1】:

Numeric(5, 2) 允许的数字最大为 999.99,包括 999.99。如果您尝试将 1000.0 插入其中,则会出现算术溢出。

Numeric(9,2) 允许的数字最大为 9 999 999.99

请记住,如果您打算对这个值求和,请留出额外的空间,否则会溢出,或者您需要进行显式转换。

它们占用相同的字节数。由于它们的存储大小相同,因此它们在数据页、内存、索引、网络传输等方面都是相同的。

正是出于这个原因,我通常会计算出我需要存储的大小数字(如果使用数字),然后增加精度(可能还有比例),这样我就刚好低于存储大小增加的点。 因此,如果我需要存储多达 9900 万个小数点后 4 位,那将是数字 (12,4)。对于相同的存储,我可以有一个数字 (19,6),并在业务用户宣布他们确实需要在其中存储数十亿时提供一些安全空间。

【讨论】:

    猜你喜欢
    • 2015-05-15
    • 1970-01-01
    • 2010-10-20
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2014-09-24
    • 1970-01-01
    相关资源
    最近更新 更多