SQL Server UDT大小 2005到2008

4
在SQL Server 2005中,我们定义了一些UDT(用户自定义数据类型),其中一个是SK(代理键)。 这些被定义为32位'int',因此大小为4个字节。
在SQL Server 2008中,整数数据类型的UDT使用不同的存储机制,具体取决于精度:
存储 显示UDT的最大存储大小。最大存储大小因精度而异。
精度(数字).....存储(字节)
1-9........................5
10-19....................9
20-28...................13
29-38...................17
这样做的一个后果是基于int和bigint的UDT将占用9个字节! 注意:本机int和bigint数据类型仍分别占用4和8个字节!
对于代理键UDT来说,9个字节似乎很重量级!
有人能解释这是为什么吗?特别是这种设计理念是什么?为什么UDT和本机数据类型之间存在差异?
除了不使用UDT外,是否还有其他替代方法?
1个回答

1

对不起,但我觉得你搞错了。记住,“SELECT 没有问题”,微软不会在没有强烈的广告宣传转换问题的情况下修改引擎的关键部分。

你引用的表来自于 MSDN 中的十进制数字存储,这些基本上比 int更大。

如果你使用一个严格的别名,使用特殊数据类型 强烈暗示一个基于int的类型需要四个字节而不再多。如果你使用一个 CLR 类型,就会有一些问题或者更多的开销。

无论如何,你可以通过查看 sys.types 来验证你的数据类型的占用空间。


嗨Johan,谢谢你的回复。我确实理解你所说的要点。但问题是,当我进入“新用户定义数据类型”并基于int创建UDT时,精度显示为10,存储显示为9字节 - 而不是sys.types建议的4个字节。对此有什么评论吗? - PaoloFCantoni
嗨Johan,进一步的研究表明这是一个UI错误。在sys.types中分配的实际存储量为4个字节的int。感谢您的帮助。 - PaoloFCantoni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接