Почему и когда я должен использовать разреженный столбец? (SQL SERVER 2008)



пройдя через некоторые учебники по новой функции разреженного столбца SQL SERVER 2008, я обнаружил, что он не занимает места, если значение столбца равно 0 или null, но когда есть значение, оно занимает в 4 раза больше места, чем обычный(не разреженный) столбец.



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



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



спасибо заранее

757   5  

5 ответов:

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

  • таким образом, ненулевое значение хранится в немного

  • хранение null в разреженном столбце не занимает места вообще.

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

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

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

  • Change Data Capture и репликация транзакций работают, но не функция наборов столбцов.

минусы

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

  • не все типы данных могут быть разреженными: text, ntext, image, timestamp, user-defined data type, geometry, geography или varbinray (max) с атрибутом FILESTREAM не могут быть разреженными. (Changed17 / 5 / 2009 спасибо Алекс для обнаружения опечатки)

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

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

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

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

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

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

ссылка

Вы читаете это неправильно - это никогда не занимает 4x пространство.

в частности, он говорит 4 * (4 байта, см. сноску), а не 4x (умножить на 4). Единственный случай, когда это точно 4x пространство-это char(4), который будет видеть экономию, если нули существуют более 64% времени.

"*длина равна среднему значению данных, содержащихся в типе, плюс 2 или 4 байта."

| datetime NULL      | datetime SPARSE NULL | datetime SPARSE NULL |
|--------------------|----------------------|----------------------|
| 20171213 (8 bytes) | 20171213 (12 bytes)  | 20171213 (12 bytes)  |
| NULL     (8 bytes) | 20171213 (12 bytes)  | 20171213 (12 bytes)  |
| 20171213 (8 bytes) | NULL      (0 bytes)  | NULL      (0 bytes)  |
| NULL     (8 bytes) | NULL      (0 bytes)  | NULL      (0 bytes)  |

вы теряете 4 байта не только один раз в строке; но и для каждой ячейки в строке, которая не является нулевой.

с SQL SERVER-2008-введение в разреженные столбцы-Часть 2 by Пинал Дэйв:

все разреженные столбцы хранятся как один столбец XML в базе данных. Позволь нам см. некоторые преимущества и недостатки разреженного столбца.

преимущества разреженного столбца:

  • инструкции INSERT, UPDATE и DELETE могут ссылаться на разреженные столбцы по имени. Разреженный столбец может работать как один столбец XML, а также.

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

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

недостатки разреженного столбца:

  • разреженный столбец не имеет свойства IDENTITY или ROWGUIDCOL.

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

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

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

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

Comments

    Ничего не найдено.