考虑到
MSDN关于sql Server 2008 R2存储的NUMERIC / DECIMAL精度.
Precision of 1 to 9 is 5 bytes
Precision of 10 to 19 is 9 bytes
因此,如果我的商业案例逻辑上需要一个数据类型,具有2位小数和5位精度,如果将其定义为NUMERIC(5,2)或NUMERIC(9,2),则不会产生实际的性能或存储差异.
一个考虑到我有意忽略的是隐含的检查约束,因为我很可能对限制实际允许范围的列实际检查约束.
解决方法
数字(5,2)允许数字高达999.99.如果你尝试插入1000.0,你会得到一个算术溢出.
数字(9,2)允许数字高达9999 999.99
请记住,如果您计划总计此值,请允许额外的空间,否则您将获得溢出,否则您需要进行明确的转换.
它们占用相同数量的字节.由于它们的存储空间大小相同,因此在数据页,内存,索引,网络传输等方面都是一样的.
正是由于这个原因,我通常会找出我需要存储的大小数字(如果使用数字),然后增加精度(也可能是缩放),以便我刚刚低于存储大小增加点.所以如果我需要存储高达99万的4位小数,那将是数字(12,4).对于相同的存储,我可以有一个数字(19,6),并给一些安全的空间,当业务用户宣布他们确实需要存储十亿在那里.