Отключение индексов

Отключение индексов предотвращает доступ пользователя к индексам в случае использования кластеризованных индексов к данным базовой таблицы. Определение индекса остается в метаданных, и статистики индекса сохраняются на некластеризованных индексах. Отключение некластеризованных индексов или кластеризованных индексов в представлении физически удаляет данные индекса. Отключение кластеризованного индекса таблицы предотвращает доступ к данным; данные остаются в таблице, но они недоступны для операций DML до тех пор, пока не происходит удаление или перестроение индекса. Чтобы перестроить и включить отключенный индекс, используйте инструкцию ALTER INDEX REBUILD или инструкцию CREATE INDEX WITH DROP_EXISTING.

Один или более индексов могут оказаться отключенными в следующих ситуациях:

  • Компонент SQL Server Database Engine автоматически отключает индекс во время обновления приложения SQL Server.

  • Индекс отключен вручную с помощью инструкции ALTER INDEX.

Обновление SQL Server Upgrade отключает индекс

Во время обновления до новой версии или во время обновления с помощью пакета обновления для SQL Server компонент Database Engine автоматически идентифицирует и отключает индекс, включая индексы представлений, если индекс или определение представления содержит одно из следующего:

  • Выражение, для которого компонент Database Engine не может гарантировать целостность данных индекса.

    Например, предположим, что в индексе используется системная функция и во время обновления функция была изменена таким образом, что теперь она возвращает другой результат. Компонент Database Engine отключит индекс в течение процесса обновления, потому что индекс может содержать данные, которые не будут верны после обновления.

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

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

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

Использование инструкции ALTER INDEX для отключения индекса

С помощью инструкции ALTER INDEX DISABLE можно в любое время вручную отключить индекс.

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

Если таблица входит в публикацию репликации транзакций, то нельзя отключить никакие индексы, связанные со столбцами первичного ключа. Эти индексы необходимы для репликации. Чтобы отключить индексы, сначала необходимо удалить таблицу из публикации. Дополнительные сведения см. в разделе Публикация данных и объектов базы данных.

Отключение индекса вручную может быть полезно в следующих случаях:

  • Исправление ошибок дисковых операций ввода-вывода (ошибка 823 или 824) на индексной странице и последующее перестроение индекса.

  • Временное удаление индекса для устранения неполадок.

  • Перестроение некластеризованных индексов.

    Если некластеризованный индекс включен, операция перестроения требует временное место на диске, достаточное для хранения нового и старого индекса. При отключении и перестроении некластеризованных индексов в отдельной транзакции место на диске, освобожденное при отключении индексов, может быть использовано для последующего перестроения или для любой другой операции. Дополнительного места на диске не требуется, за исключением временного места на диске для сортировки; обычно это 20 процентов от размера индекса.

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

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

ALTER INDEX (Transact-SQL)

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