Поделиться через


Удаление индексов

Если индекс больше не нужен, его можно удалить из базы данных и освободить занимаемое им место на диске. Любой объект базы данных сможет использовать освобожденное место. Удаление индекса с помощью инструкций DELETE и DROP — это одно и то же действие.

Индекс, используемый ограничениями PRIMARY KEY и UNIQUE, можно удалить только вместе с ограничением. Изменив индекс, используемый ограничениями PRIMARY KEY и UNIQUE, например изменив его значение коэффициента заполнения, можно фактически удалить его и создать заново, не меняя ограничения. Дополнительные сведения о перестройке индексов см. в разделе Реорганизация и перестроение индексов.

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

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

ПримечаниеПримечание

Чтобы удалить индекс, необходимы разрешения ALTER на соответствующую таблицу.

Кластеризованные индексы

При удалении кластеризованного индекса все строки данных, хранящиеся на конечном уровне этого индекса, хранятся в неупорядоченной таблице (куче). Удаление кластеризованного индекса может занять определенное время, так как кроме удаления кластеризованного индекса, нужно перестроить все некластеризованные индексы данной таблицы, чтобы заменить ключи кластеризованного индекса указателями на строки кучи. При удалении всех индексов таблицы начинайте с некластеризованных и заканчивайте кластеризованными. Тогда не нужно будет перестраивать индексы. Дополнительные сведения об отношениях между кластеризованными и некластеризованными индексами см. в разделе Структуры некластеризованных индексов.

Чтобы удалить кластеризованный индекс в оперативном режиме или при задании предложения MOVE TO, требуется временное место на диске. Дополнительные сведения см. в разделе Требования к месту на диске для DDL-операций индекса.

Если удаляются кластеризованные индексы индексированного представления, то все некластеризованные индексы и автоматически создаваемые статистики на этом представлении автоматически удаляются. Статистики, созданные вручную, не удаляются.

Использование предложения MOVE TO

Можно удалить кластеризованный индекс и переместить результирующую неупорядоченную таблицу (кучу) в другую файловую группу или схему секционирования одной транзакцией с помощью параметра MOVE TO. Параметр MOVE TO обладает следующими ограничениями.

  • Он недействителен для индексированных представлений или некластеризованных индексов.

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

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

Удаление кластеризованных индексов в оперативном режиме

При удалении кластеризованного индекса можно указать параметр ONLINE. Если он принимает значение ON, запросы и изменения базовых данных и связанных некластеризованных индексов не будут блокироваться транзакцией DROP INDEX. Дополнительные сведения см. в разделе Выполнение фоновых операций с индексами.

Если параметр ONLINE принимает значение ON, он обладает следующими ограничениями.

  • За раз можно удалять только один индекс.

  • Он недействителен для отключенных кластеризованных индексов.

  • Он недействителен для кластеризованных индексов представлений или некластеризованных индексов таблиц и представлений.

  • Кластеризованный индекс, содержащий столбцы типов text, ntext, image, varchar(max), nvarchar(max), varbinary(max) или xml в строках данных конечного уровня, не может быть удален в оперативном режиме.

Задание параметра индексирования MAXDOP

Можно переопределить параметр конфигурации max degree of parallelism хранимой процедуры sp_configure для операции удаления индексов, указав параметр индекса MAXDOP. Дополнительные сведения см. в разделе Настройка параллельных операций с индексами.

Полнотекстовые индексы

Индекс, являющийся полнотекстовым ключом таблицы, не может быть удален. Просмотрите свойства индекса, чтобы определить, является ли он полнотекстовым ключом. Дополнительные сведения см. в разделе INDEXPROPERTY (Transact-SQL).

Удаление индекса

DROP INDEX (Transact-SQL)

Как удалить индекс (среда SQL Server Management Studio)

Примеры

А. Удаление индекса

В следующем примере удаляется индекс IX_ProductVendor_VendorID таблицы ProductVendor.

USE AdventureWorks;
GO
DROP INDEX IX_ProductVendor_VendorID 
    ON Purchasing.ProductVendor;
GO

Б. Удаление кластеризованного индекса в оперативном режиме

В следующем примере удаляется кластеризованный индекс со значением ON параметра ONLINE. Результирующая неупорядоченная таблица (куча) хранится в той же файловой группе, где находился индекс.

USE AdventureWorks;
GO
DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate 
    ON Production.BillOfMaterials WITH (ONLINE = ON, MAXDOP = 2);
GO

См. также

Справочник