【发布时间】:2010-10-13 01:52:32
【问题描述】:
在 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 个字节! 注意:原生 int 和 bigint 数据类型仍然分别占用 4 和 8 个字节!
9 字节对于代理键 UDT 来说似乎相当重量级!
谁能解释为什么会这样(特别是设计原理是什么)? UDT 和本机数据类型之间为什么会出现这种差异?
除了不使用 UDT,还有其他方法吗?
【问题讨论】:
标签: sql sql-server sql-server-2008 user-defined-types