Почему и Когда я должен использовать РЕДКИЙ СТОЛБЕЦ? (SQL-СЕРВЕР 2008)

После прохождения через некоторых учебных руководств на новой возможности 2008 SQL Server "РЕДКИЙ СТОЛБЕЦ", я нашел, что это не занимает места, если значение столбца 0 или ПУСТОЙ УКАЗАТЕЛЬ, но когда существует значение, это берет 4 раза пространству постоянного клиента (не редкий), столбец содержит.

Если мое понимание корректно, то, почему я пойду для этого во время проектирования баз данных? И если я использую это, затем в том, каков ситуация я буду?

Также из любопытства, как никакое пространство не становится зарезервированным, когда столбец определяется как редкий столбец (я означаю говорить, какова внутренняя реализация для этого?)

64
задан Patrick Mevzek 15 August 2019 в 00:27
поделиться

2 ответа

В разреженном столбце не используется 4-кратный объем места для хранения значения, он использует (фиксированный) 4 дополнительных байта на каждое ненулевое значение. (Как вы уже сказали, NULL занимает 0 пробелов.)

  • Таким образом, ненулевое значение, хранящееся в столбце бит , будет 1 бит + 4 байта = 4,125 байта. Но если 99% из них имеют значение NULL, это все равно чистая экономия.

  • Ненулевое значение, хранимое в столбце GUID (UniqueIdentifier) ​​, составляет 16 байтов + 4 байта = 20 байтов. Таким образом, если только 50% из них имеют значение NULL, это все равно чистая экономия.

Таким образом, «ожидаемая экономия» сильно зависит от вида столбца, о котором мы говорим, и вашей оценки того, какое соотношение будет нулевым по сравнению с ненулевым. Столбцы переменной ширины (varchars), вероятно, немного сложнее точно предсказать.

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

Итак, , когда следует использовать разреженный столбец? Когда вы ожидаете, что значительный процент строк будет иметь значение NULL. Некоторые примеры, которые приходят на ум:

  • Столбец « Дата возврата заказа » в таблице заказов. Можно надеяться, что очень небольшой процент продаж приведет к возвращению товаров.
  • Строка « 4-й адрес » в таблице адресов. Для большинства почтовых адресов, даже если вам нужно название отдела и «Care Of», вероятно, не нужны 4 отдельные строки.
  • A « Суффикс » столбец в таблице клиентов. Достаточно низкий процент людей имеет «младший». или "III" или "Esquire" после их имени.
87
ответ дан 24 November 2019 в 15:53
поделиться
  • Сохранение нуля в разреженном столбце вообще не занимает места.

  • Для любого внешнего приложения столбец будет вести себя одинаково

  • Разреженные столбцы отлично работают с отфильтрованными индексами, как и вы потребуется только создать индекс для работы с непустыми атрибутами в столбце.

  • Вы можете создать набор столбцов над разреженными столбцами, который возвращает xml-клип всех ненулевых данных из столбцов, охватываемых установлен. Набор столбцов ведет себя как сам столбец. Примечание: вы можете иметь только один набор столбцов для каждой таблицы.

  • Обе функции отслеживания измененных данных и транзакционной репликации работают, но не функция наборов столбцов.

Недостатки

  • Если в разреженном столбце есть данные, потребуется 4 больше байтов, чем в обычном столбце, например, даже бит (обычно 0,125 байта) составляет 4,125 байта, а уникальный идентификатор увеличивается с 16 до 20 байтов.

  • Не все типы данных могут быть разреженными: текст, ntext, изображение, отметка времени, определяемый пользователем тип данных, геометрия или география или varbinray (max) с атрибутом FILESTREAM не могут быть разреженными. (Изменено 17/5/2009, спасибо Алекс за обнаружение опечатки)

  • вычисляемые столбцы не могут быть разреженными (хотя разреженные столбцы могут участвовать в вычислениях в другом вычисляемом столбце)

  • Вы не можете применять правила или использовать значение по умолчанию значения.

  • Разреженные столбцы не могут быть частью кластеризованного индекса. Если вам нужно сделать это, используйте вычисляемый столбец на основе разреженного столбца и создайте для него кластеризованный индекс (что не позволяет объекту).

  • Репликация слиянием не работает.

  • Сжатие данных не работает .

  • Доступ (чтение и запись) к разреженным столбцам дороже, но мне не удалось найти точных цифр по этому поводу.

Ссылка

23
ответ дан 24 November 2019 в 15:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: