Отключение индексов и ограничений

Применяется к:SQL ServerAzure SQL DatabaseAzure, управляемому экземпляру SQL Azure

В этом разделе описывается отключение индекса или ограничений в SQL Server с помощью SQL Server Management Studio или Transact-SQL. Отключение индексов предотвращает доступ пользователя к индексам в случае использования кластеризованных индексов к данным базовой таблицы. Определение индекса остается в метаданных, и статистики индекса сохраняются на некластеризованных индексах. При отключении кластеризованного индекса в представлении или некластеризованного индекса данные индекса удаляются физически. Отключение кластеризованного индекса в таблице позволяет предотвратить доступ к данным; данные остаются в таблице, но являются недоступными для операций языка обработки данных DML до удаления или перестроения индекса.

В этом разделе

Перед началом

Ограничения

  • При отключении индекса он не обслуживается.

  • Оптимизатор запросов не учитывает отключенные индексы при создании планов выполнения запроса. Запросы, ссылающиеся на отключенные индексы с помощью табличного указания, также завершаются сбоем.

  • Нельзя создавать индекс с именем, которое идентично имени существующего отключенного индекса.

  • Отключенный индекс может быть удален.

  • При отключении уникального индекса также отключаются ограничения PRIMARY KEY, UNIQUE и все ограничения FOREIGN KEY, ссылающиеся на индексированные столбцы из других таблиц. При отключении кластеризованного индекса также отключаются все входящие и исходящие ограничения FOREIGN KEY для базовой таблицы. При отключении индекса в предупреждающем сообщении приводятся имена ограничений. После перестроения индекса необходимо вручную включить все ограничения с помощью инструкции ALTER TABLE CHECK CONSTRAINT.

  • Некластеризованные индексы автоматически отключаются при отключении связанных с ними кластеризованных индексов. Они не могут быть включены до тех пор, пока не будет включен кластеризованный индекс таблицы или представления или пока не будет удален кластеризованный индекс таблицы. Некластеризованные индексы должны быть явно включены в том случае, если кластеризованные индексы не были включены ранее с помощью инструкции ALTER TABLE CHECK CONSTRAINT.

  • Инструкция ALTER INDEX ALL REBUILD перестраивает и включает все отключенные индексы таблицы, за исключением индексов представления. Для включения индексов представлений используется отдельная инструкция ALTER INDEX ALL REBUILD.

  • При отключении кластеризованного индекса в таблице также отключаются все кластеризованные и некластеризованные индексы в представлениях, которые ссылаются на эту таблицу. Указанные индексы должны быть перестроены, так же как и индексы ссылочной таблицы.

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

  • Перестройка отключенных некластеризованных индексов в режиме в сети возможна, если таблица не содержит отключенные кластеризованные индексы. Однако при использовании инструкций ALTER INDEX REBUILD и CREATE INDEX WITH DROP_EXISTING отключенные кластеризованные индексы могут быть перестроены только в режиме вне сети. Дополнительные сведения об операциях с индексами в сети см. в статье Выполнение операции с индексами в сети.

  • Инструкция CREATE STATISTICS не может применяться к таблицам, содержащим отключенные кластеризованные индексы.

  • Параметр базы данных AUTO_CREATE_STATISTICS создает новые статистики для столбцов с отключенными индексами при выполнении следующих условий:

    • Параметр AUTO_CREATE_STATISTICS установлен в значение ON

    • Для данного столбца не существует статистик.

    • Статистики необходимы при оптимизации запросов.

  • Если кластеризованные индексы отключены, то DBCC CHECKDB не может вернуть сведения о базовой таблице. Вместо этого результатом выполнения этой инструкции будет сообщение об отключенном кластеризованном индексе. Инструкция DBCC INDEXDEFRAG не может быть использована для дефрагментации отключенного индекса. В этом случае она возвращает сообщение об ошибке. Инструкция DBCC DBREINDEX может быть использована для перестроения отключенного индекса.

  • При создании нового кластеризованного индекса включаются ранее отключенные некластеризованные индексы. Дополнительные сведения см. в статье Enable Indexes and Constraints.

Безопасность

Разрешения

Для выполнения ALTER INDEX необходимо иметь как минимум разрешение ALTER для таблицы или представления.

Использование среды SQL Server Management Studio

Отключение индекса

  1. В обозревателе объектов щелкните знак «плюс», чтобы развернуть базу данных, содержащую таблицу, в которой необходимо отключить индекс.

  2. Чтобы развернуть папку Таблицы , щелкните значок «плюс».

  3. Щелкните знак «плюс», чтобы развернуть таблицу, в которой необходимо отключить индекс.

  4. Чтобы развернуть папку Индексы , щелкните знак «плюс» (+).

  5. Щелкните правой кнопкой мыши индекс, который необходимо отключить, и выберите пункт Отключить.

Заметка

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

  1. В диалоговом окне Отключение индексов убедитесь, что нужный индекс указан в сетке Индексы для отключения , и нажмите кнопку ОК.

Отключение всех индексов таблицы

  1. В обозревателе объектов щелкните знак «плюс», чтобы развернуть базу данных, содержащую таблицу, в которой необходимо отключить индексы.

  2. Чтобы развернуть папку Таблицы , щелкните значок «плюс».

  3. Щелкните знак «плюс», чтобы развернуть таблицу, в которой необходимо отключить индексы.

  4. Щелкните правой кнопкой мыши папку Индексы и выберите Отключить все.

  5. В диалоговом окне Отключение индексов убедитесь, что нужные индексы указаны в сетке Индексы для отключения , и нажмите кнопку ОК. Для удаления индекса из сетки Индексы для отключения выберите индекс и нажмите клавишу DELETE.

В диалоговом окне Отключить индексы доступны следующие сведения:

Index Name
Отображает имя индекса. В ходе выполнения в этом столбце также отображается значок, представляющий состояние.

Имя таблицы
Отображает имя таблицы или представления, для которых был создан индекс.

Тип индекса
Отображает тип индекса: кластеризованный, некластеризованный, пространственныйили XML.

Состояние
Отображает состояние операции отключения. Возможные значения после выполнения.

  • Blank

    Состояние до выполнения является пустым.

  • Выполняется

    Отключение индексов было начато, но еще не завершено.

  • Успешно

    Операция отключения успешно завершена.

  • Ошибка

    При отключении индекса возникла ошибка, и операция отключения не была успешно завершена.

  • Остановлено

    Отключение индекса не было завершено успешно, поскольку пользователь остановил операцию.

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

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

  • Щелкните гиперссылку, чтобы вызвать диалоговое окно, отображающее полный текст сообщения об ошибке.

Использование Transact-SQL

Отключение индекса

  1. В обозревателе объектов подключитесь к экземпляру ядра СУБД.

  2. На стандартной панели выберите пункт Создать запрос.

  3. Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить.

    USE AdventureWorks2022;  
    GO  
    -- disables the IX_Employee_OrganizationLevel_OrganizationNode index  
    -- on the HumanResources.Employee table  
    ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
    DISABLE;  
    

Отключение всех индексов таблицы

  1. В обозревателе объектов подключитесь к экземпляру ядра СУБД.

  2. На стандартной панели выберите пункт Создать запрос.

  3. Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить.

    USE AdventureWorks2022;  
    GO  
    -- Disables all indexes on the HumanResources.Employee table.  
    ALTER INDEX ALL ON HumanResources.Employee  
    DISABLE;  
    

Дополнительные сведения см. в разделе ALTER INDEX (Transact-SQL).