ЦИФРОВОЙ ЦИФРОВОЙ ЦИЛИЧЕСКОЙ /DECIMAL точности и хранилища

Учитывая, что MSDN содержит сведения о хранении SQL Server 2008 R2 с точностью NUMERIC/DECIMAL.

Точность от 1 до 9 - 5 байт
Точность от 10 до 19 составляет 9 байт.

Итак, если для моего бизнес-логики логически требуется тип данных с 2 десятичными знаками и точность 5 цифр, он не делает реальной разницы в производительности или хранении, если я определяю его как ЧИСЛО (5, 2) или ЧИСЛО (9, 2).

Учитывая, что я намеренно игнорирую это подразумеваемое ограничение проверки, поскольку я, скорее всего, поставил бы фактическое ограничение проверки на столбец, ограничивающий фактический разрешенный диапазон.

Это имеет значение, когда дело доходит до индексов, производительности запросов или любого другого аспекта системы?

Ответы

Ответ 1

Числовое (5, 2) разрешает номера до 999.99 включительно. Если вы попытаетесь вставить 1000.0 в это, вы получите арифметическое переполнение.

Числовое (9,2) разрешает номера до 9 999 999,99 включительно

Имейте в виду, что если вы планируете когда-либо суммировать это значение, разрешите дополнительное пространство, иначе вы получите переполнение или вам нужно будет сделать явное приведение.

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

По этой причине я обычно определяю, какой номер числа мне нужно хранить (если используется числовое), а затем увеличивайте точность (и, возможно, масштаб), так что я чуть ниже точки, где размер хранилища увеличивается. Поэтому, если мне нужно сохранить до 99 миллионов с 4 десятичными знаками, это будет числовое (12,4). Для одного и того же хранилища я могу иметь числовое значение (19,6) и дать некоторое безопасное пространство, когда бизнес-пользователь объявит, что им действительно нужно хранить там пару миллиардов.