在SQL Server2005中,我们特别在SK (用于代理键)上定义了一些UDT (用户定义的数据类型)。它们被定义为32位的'int‘。因此大小是4字节。
在SQL Server 2008中,整数数据类型的UDT使用不同的存储机制,具体取决于精度:
Storage显示UDT的最大存储大小。最大存储大小根据精度的不同而不同。
精度(位数).....Storage(字节)
1-9...............5
10 -19.....9
20 -28.13
29 -38.....17
这样做的一个结果是,基于int和bigint的UDT将占用9个字节!注意:原生int和bigint数据类型仍然分别占用4和8个字节!
对于代理键UDT来说,9个字节似乎相当重要!
有没有人能解释为什么会这样(特别是它的设计原理是什么)?为什么UDT和原生数据类型之间存在这种差异?
除了不使用UDT之外,还有其他方法吗?
发布于 2009-03-14 15:24:44
对不起,在我看来你弄错了。请记住,"SELECT不是坏的“,微软不会在没有强烈广告的情况下修改引擎的如此关键部分,因为转换问题。
您引用的表来自中的decimal和numeric存储,它们基本上大于int
如果您使用的是严格别名,Using special datatypes强烈建议int-based类型需要4个字节,最多不超过4个字节。如果你使用的是CLR类型,就会有龙,或者更多的开销。
无论如何,您可以通过查看sys.types来验证您的数据类型的占用空间
https://stackoverflow.com/questions/641244
复制相似问题