考虑到关于Server 2008的MSDN状态,R2存储的数值/十进制精度。
1到9的
精度为5字节
10到19的精度是9个字节。
因此,如果我的业务用例逻辑上要求数据类型为2位小数,精度为5位,那么如果我将其定义为数值(5,2)或数值(9,2),则没有实际的性能或存储差异。
我有意忽略的一个考虑是隐含的check约束,因为我很可能会在列上放置一个实际的check约束,限制实际允许的范围。
当涉及到索引、查询性能或系统的任何其他方面时,这会有什么区别吗?
发布于 2011-01-12 19:05:48
数字(5,2)允许数字达到并包括999.99。如果你试图插入1000.0,你会得到一个算术溢出。
数字(9,2)允许数字达到并包括9999 999.99
请记住,如果您计划将此值相加,请允许额外的空间,否则会出现溢出,或者需要进行显式强制转换。
它们占用相同的字节数。因为它们的存储大小相同,所以它们在数据页、内存、索引、网络传输等方面都是一样的。
出于这个原因,我通常计算出我需要存储的大小号(如果使用数字),然后提高精度(也许是缩放),这样我就会低于存储大小增加的点。因此,如果我需要存储多达9900万位小数点4位,那将是数字(12,4)。对于相同的存储空间,我可以有一个数字(19,6),并给出一些安全的空间,当业务用户宣布他们确实需要在其中存储几十亿。
https://stackoverflow.com/questions/4672476
复制相似问题