Значение параметра sql azure, равное null, увеличивает размер таблицы - PullRequest
1 голос
/ 08 января 2012

У меня было поле уникального идентификатора в SQL Server (точнее, в SQL Azure), от которого я хотел избавиться. Изначально, когда я запускал код, указанный в Размер таблицы SQL Azure , чтобы определить размер таблицы, он составлял около 0,19 МБ.

В качестве первого шага я установил все значения в поле uniqueidentifier на null. Нет никаких ограничений / индексов, которые используют столбец. Теперь, когда я запустил код для определения размеров таблицы, размер таблицы увеличился примерно до 0,23 МБ. Нет записей, добавляемых в таблицу (в промежуточной среде).

Я продолжил удалять столбец, и он все еще завис в том же диапазоне. Почему размер базы данных увеличивается при удалении столбца. Есть предложения?

Ответы [ 2 ]

1 голос
/ 09 января 2012

Установка для столбца uniqueidentifier значения NULL никак не меняет размер записи, поскольку это тип с фиксированным размером (16 байт). Удаление столбца с фиксированным размером не приводит к изменению размера записи, если только он не является последним столбцом в физическом макете, и пространство можно использовать позже. ALTER TABLE ... DROP COLUMN - это всего лишь логическая операция, она просто помечает столбцы как отброшенные, см. Столбцы SQL Server под капотом .

Чтобы освободить место, вам нужно отбросить столбец и затем перестроить кластеризованный индекс таблицы, см. ALTER INDEX ... REBUILD .

Для записи (поскольку SHRINK в SQL Azure в любом случае не разрешен) на автономном SQL Server SHRINK ничего бы не решил, речь идет не о резервировании страницы, а о физическом размере записи.

0 голосов
/ 08 января 2012

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

Я думаю, вам нужно уменьшить базу данных, чтобы увидеть уменьшение размера, согласно: http://social.msdn.microsoft.com/Forums/en-US/ssdsgetstarted/thread/ae698613-79d5-4f23-88b4-f42ee4b3ad46/

Кроме того, я вполне уверен, что установка значения для столбца не переменной длины (например, GUID) в ноль не сэкономит вам места вообще - только удаление столбца сделает это. Это за Пространство, используемое нулями в базе данных

...