主键的SQL Server BIGINT或DECIMAL(18,0)

前端之家收集整理的这篇文章主要介绍了主键的SQL Server BIGINT或DECIMAL(18,0)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有一个sql Server 2005数据库,我们想要提高批量删除/插入/选择的性能,我注意到它的主键使用十进制(18,0).我知道这将给我们提供比bigint更多的价值,但希望它可能是一个快速的胜利,并且应该通过我的计算让我们持续数百万年的增长.

我在.net docs小数中看到16个字节而不是long需要的8个字节,但在sql Server中它看起来像bigint take 8 bytes但小数(18,0)仅占用5 bytes – 如同选择DATALENGTH(max(id)所见)从表.它是否正确?

有没有其他原因bigint可能会更慢或我应该坚持十进制(18,0)?

解决方法

在计算字节数之前,DATALENGTH会转换为varchar.所以你的最大值是< 100000. 用这个可以证明9个字节. sys.columns有一个max_length列(十进制是固定长度所以它总是9个字节,在你另外要求之前)
CREATE TABLE dbo.foo (bar decimal(18,0))
GO
SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('foo') 
GO
DROP TABLE dbo.foo
GO

由于遗留原因,在使用sql Server 2000添加bigint之前,十进制(18,0)通常用作“64位整数”的代理.

十进制(18,0)和bigint在范围内大致相同:根据文档,十进制是9字节多一个字节

最重要的是,普通整数将比小数快一些(可能不可测量).如果说,如果预计明年或5年将有超过40亿行,那么表现应该很重要.如果没有,那么只需使用int

猜你在找的MsSQL相关文章