我们有一个 SQL Server 2005 数据库,我们希望提高批量删除/插入/选择的性能,我注意到它使用decimal(18,0)
为其主键。我知道这会给我们带来更多的价值bigint
但我希望这可能是一个快速的胜利,并且根据我的计算,应该能让我们持续数百万年的增长。
我在.net上看到docs小数占用 16 个字节,而不是长整型所需的 8 个字节,但在 SQL Server 中,它看起来像bigint
占用8个字节但是decimal(18,0)
只需要5 bytes- 也看到了select DATALENGTH(max(id)) from table
。它是否正确?
还有其他原因吗bigint
可能会慢一些或者我应该坚持decimal(18,0)
?
您可以使用 bigint 获得此范围:
-2^63 to 2^63-1
also known as roughly:
-9.2 x 10^18 to 9.2 x 10^18
你可以用decimal(18,0)得到这个范围:
-10^18 to 10^18
十进制:每精度的存储字节数
Precision Storage Bytes
1-9: 5
10-19: 9
20-28: 13
29-38: 17
整数类型和存储字节
integer type Storage Bytes
bigint 8
int 4
smallint 2
tinyint 1
Thoughts
您的问题中发布的两个示例实际上产生了几乎相同数量的唯一值。
此外,无论您如何选择,您都不会看到显着的性能变化,但如果您开始在程序员期望整数的地方使用小数,您将看到团队中其他程序员的效率发生变化。这是一个小问题。
为了解决您的特定问题,如果您想要更大的范围,请使用 Decimal(38,0)。这给你:
-10^38 to 10^38
如果您关心速度,请使用软件生命周期内的最低精度。
如果您不是以纳秒为单位测量时间,那么请选择最适合您的程序员的思维方式以及您想要拥有一组很长的数字的愿望的选项。
参考
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)