在 SQL Server 2005 中,我们在特别是 SK(代理键)上定义了一些 UDT(用户定义数据类型)。这些被定义为 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 个字节!
注意:原生 int 和 bigint 数据类型仍然分别占用 4 和 8 个字节!
对于代理键 UDT 来说,9 个字节似乎非常重要!
谁能解释为什么会这样(特别是这样做的设计原理是什么)? UDT 和 native 数据类型之间的差异是如何产生的?
除了不使用 UDT 之外,还有其他替代方法吗?
最佳答案
对不起,但在我看来你弄错了。请记住,“SELECT 没有损坏”并且由于转换问题,Microsoft 不会在没有强烈宣传的情况下修改他们引擎的如此关键部分。
您引用的表来自 十进制 和 数字 存储在 MSDN ,它们基本上比 int 多
如果您使用严格的别名,Using special datatypes 强烈暗示基于 int 的类型需要四个字节,仅此而已。
如果您使用的是 CLR 类型,则会出现龙或更多开销。
无论如何,您可以通过查看 sys.types 来验证数据类型的占用空间
关于SQL Server UDT 大小 2005 到 2008,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/641244/