Восстановить пространство в таблице SQL 2005 после изменения типа данных? - PullRequest
1 голос
/ 02 июня 2009

Я создал базу данных с таблицами со многими столбцами nvarchar. Таблицы становились довольно большими, и я решил изменить типы данных на varchar, чтобы сократить объем памяти, потому что мы не используем международные символы. «Пространство данных» в таблице (щелкните правой кнопкой мыши, затем «Свойства») не изменилось. Однако если я скопирую эту таблицу в новую таблицу, используемое там пространство данных будет примерно на 60% больше размера исходной таблицы.

Я использовал 'DBCC CLEANTABLE' в других случаях, чтобы освободить пространство после УДАЛЕНИЯ столбца переменной длины. Но, похоже, это не работает при изменении типов данных переменной длины. Как мне вернуть это место?

Для тех, кто не знаком с DBCC CLEANTABLE, MS предлагает хорошую статью с примером кода для AdventureWorks.

http://msdn.microsoft.com/en-us/library/ms174418(SQL.90).aspx

Ответы [ 2 ]

4 голосов
/ 02 июня 2009

Перестроить кластерный индекс, если DBCC не работает.

0 голосов
/ 02 июня 2009

Поскольку BOL указывает CLEANTABLE, только бесплатные страницы из столбцов переменной длины. Ваша база данных, вероятно, фрагментирована, что обычно происходит во время работы базы данных. Похоже, что SQL Server считает фрагментированную страницу используемой и не отображает ее как доступное пространство (кстати, sp_spaceused вызывает это нераспределенное пространство)

Вы можете увидеть, насколько фрагментированы ваши таблицы с DBCC SHOWCONTIG.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...