2009-03-13 2 views
4

В SQL Server 2005 мы определили некоторые UDT (User Defined Datatypes), в частности, это SK (для ключа Surrogate). Они были определены как 32 бит 'int'. И, следовательно, размер был 4 байта.SQL Server UDT с 2005 по 2008 год

В SQL Server 2008, то UDT для целочисленных типов данных использует другой механизм хранения, в зависимости от точности:

хранения Отображает максимальный размер хранилища для UDT. Максимальные размеры хранилища варьируются в зависимости от точности.

Precision (цифры) ..... хранения (байт)

1 - 9 ........................ 5

10 - 19 .................... 9

20 - 28 ................ ... 13

29 - 38 ................... 17

Одним из следствий этого является то, что на основе Пользовательские типы ОБА INT и BIGINT будет занимать 9 байт! ПРИМЕЧАНИЕ: собственные типы int и bigint по-прежнему занимают соответственно 4 и 8 байтов!

9 байтов кажется довольно тяжелым для суррогатного ключа UDT!

Может ли кто-нибудь объяснить, почему это так (в частности, что такое обоснование дизайна для этого было)? Как получилось это несоответствие между UDT и родными типами данных?

Существуют ли какие-либо альтернативные подходы, кроме НЕ использующих UDT?

ответ

1

Извините, но мне кажется, что вы ошибаетесь. Помните: «SELECT не сломан», и Microsoft не будет модифицировать такую ​​критическую часть своего движка, не рекламируя его сильно из-за проблем с конверсией.

стол вы цитируете происходит от десятичной и цифровой хранения в MSDN, которые в основном больше, чем INT

Если вы используете строгий псевдоним, Using special datatypes сильно намекает, что int - тип берет четыре байта и не более. Если вы используете тип CLR, там есть драконы или больше накладных расходов.

В любом случае, Вы можете проверить след ваших типов данных, глядя в sys.types

+0

Привет Johan, спасибо за это. Я понимаю, что вы сделали. НО проблема в том, что когда я перехожу в «Новый пользовательский тип данных» и создаю UDT на основе int, точность отображается как 10, а хранилище отображается как 9 байтов - не 4, как предполагали sys.types. Любые комментарии по этому поводу? – PaoloFCantoni

+0

Привет, Йохан, дальнейшие исследования показывают, что это ошибка UI. Фактический объем хранилища, выделенный в sys.types, составляет 4 байта для int. Спасибо за помощь. – PaoloFCantoni

+0

Спасибо. (repwhoring part) Если мой ответ действительно помог, пожалуйста, подтвердите и отметьте его как принятый. –