繁体   English   中英

SQL Server UDT大小为2005到2008

[英]SQL Server UDT sizes 2005 to 2008

在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

这样做的一个结果是基于BOTH int和bigint的UDT将占用9个字节! 注意:native int和bigint数据类型仍然分别占用4和8个字节!

对于代理键UDT,9个字节似乎相当重要!

任何人都可以解释为什么会这样(特别是这个的设计理由是什么)? 为什么UDT和本机数据类型之间存在这种差异?

除了不使用UDT之外还有其他方法吗?

对不起,但在我看来你错了。 请记住,“SELECT不会被破坏”,并且微软不会修改其引擎的这一关键部分而不会因转换问题而强烈宣传它。

您引用的表来自MSDN中的 十进制数字存储,它们基本上大于int

如果您使用的是严格别名,则使用特殊数据类型会强烈暗示基于int的类型需要四个字节而不是更多。 如果您使用的是CLR类型,则存在龙或更多开销。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM