Размеры SQL Server UDT с 2005 по 2008 - PullRequest
4 голосов
/ 13 марта 2009

В SQL Server 2005 мы определили некоторые UDT (определяемые пользователем типы данных), в частности, SK (для суррогатного ключа). Они были определены как 32-битные int. И, следовательно, размер был 4 байта.

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

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

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

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

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

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

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

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

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

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

Есть ли альтернативные подходы, кроме того, чтобы НЕ использовать UDT?

1 Ответ

1 голос
/ 14 марта 2009

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

таблица, которую вы цитируете, взята из десятичного и числового хранилища в MSDN , которое в основном превышает int

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...