Размеры определяемого пользователем типа SQL Server с 2005 по 2008 год.
-
22-07-2019 - |
Вопрос
В 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