Удаление столбца не уменьшает размер базы данных

У меня есть тестовая база данных с 1 таблицей, содержащей около 50 миллионов записей. Первоначально таблица имела 50 столбцов. В таблице нет индексов. Когда я выполняю процедуру "sp_spaceused", я получаю результат "24733.88 MB". Теперь, чтобы уменьшить размер этой базы данных, я удаляю 15 столбцов (в основном int columns) и запускаю "sp_spaceused", я все равно получаю "24733.88 MB".

Почему размер базы данных не уменьшается после удаления большого количества столбцов? Я что-то пропустил здесь?

Изменить: Я попытался сжать базу данных, но это не помогло

Ответ 1

Попробуйте выполнить следующую команду:

DBCC CLEANTABLE ('dbname', 'yourTable', 0)

Это освободит место из сброшенных столбцов переменной длины в таблицах или индексированных представлениях. Более подробная информация здесь DBCC CLEANTABLE и здесь Используемое пространство не изменяется после удаления столбца

Кроме того, как правильно указано в ссылке, размещенной в первом комментарии к этому ответу. После выполнения команды DBCC CLEANTABLE вам необходимо ЗАВЕРШИТЬ ваш кластерный индекс, если таблица имеет один, чтобы вернуть пространство.

ALTER INDEX IndexName ON YourTable REBUILD

Ответ 2

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

Существует также команда DBCC DBCC CLEANTABLE, которая может использоваться для восстановления любого пространства, ранее занятого столбцами переменной длины. Вот синтаксис:

DBCC CLEANTABLE ('MyDatabase','MySchema.MyTable', 0)WITH NO_INFOMSGS;
GO

Раджа

Ответ 3

Размер базы данных не будет сокращаться просто потому, что вы удалили объекты. Сервер базы данных обычно содержит исправленное пространство, которое будет использоваться для последующих вставок данных или новых объектов.

Чтобы освободить освобожденное пространство, вам необходимо сжать файл базы данных. См. Как уменьшить мою базу данных SQL Server?