Размеры определяемого пользователем типа SQL Server с 2005 по 2008 год.

StackOverflow https://stackoverflow.com/questions/641244

Вопрос

В 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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top