Это короткое продолжение моей статьи «Заблуждения вокруг размера null bitmap».
Битовая карта NULL всегда присутствует в записи данных (т.е. в записях в куче или на конечном уровне кластерного индекса), за исключением случаев, когда в SQL Server 2008 и новее все столбцы определены как SPARSE, но она необязательна в записях индексов, если все столбцы в записях индексов не допускают значения NULL. Заблуждение связано с тем, что происходит при добавлении нового столбца в таблицу. Распространённое заблуждение заключается в том, что если у вас есть 8 столбцов в таблице (и, следовательно, 8 битов в битовой карте NULL), и вы добавляете девятый столбец, то SQL Server должен обновить каждую запись, чтобы все битовые карты NULL содержали 9 битов. (Такое же заблуждение применяется к добавлению 17-го, 25-го, 33-го и т.д. столбцов).
Обычно это не так. Давайте рассмотрим случаи:
- Новый столбец допускает NULL со значением по умолчанию NULL. Метаданные таблицы фиксируют факт существования нового столбца, но он может отсутствовать в записи. Вот почему битовая карта NULL также содержит количество столбцов в данной конкретной записи. SQL Server может определить, присутствует ли столбец в записи или нет. Таким образом — это НЕ операция, изменяющая объём данных (size-of-data operation) — существующие записи таблицы не обновляются при добавлении нового столбца. Записи будут обновлены только тогда, когда они будут изменены в ходе какой-либо другой операции.
- Новый столбец допускает NULL с не-NULL значением по умолчанию. Это зависит от версии SQL Server, которую вы используете:
- До SQL Server 2012: Это операция, изменяющая объём данных. Не-NULL значение по умолчанию заставляет обновить все существующие записи при добавлении столбца, и поэтому битовая карта NULL также будет обновлена.
- SQL Server 2012 и новее: то же поведение, что и для столбца, допускающего NULL со значением по умолчанию NULL (т.е. операция только на уровне метаданных).
- Новый столбец не допускает NULL (очевидно, с не-NULL значением по умолчанию). Это операция, изменяющая объём данных.
Надеюсь, это поможет.

Комментариев нет:
Отправить комментарий