sql-server – SQL Server NUMERIC / DECIMAL精度vs存储

考虑到 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),并给一些安全的空间,当业务用户宣布他们确实需要存储十亿在那里.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...