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


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

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azureбазе данных SQL в Microsoft Fabric

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

Ограничения

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

Перестроение отключенного кластеризованного индекса невозможно, если ONLINE опция установлена на ON.

Когда кластеризованный индекс отключен или включен, а некластеризованный индекс отключен, действие кластеризованного индекса на отключенный некластеризованный индекс дает следующие результаты.

Действие кластеризованного индекса Отключенное состояние некластеризованного индекса
ALTER INDEX REBUILD Остается отключенным
ALTER INDEX ALL REBUILD Перестроено и включено
DROP INDEX Переустроено и активировано
CREATE INDEX WITH DROP_EXISTING Остается отключенным

Создание кластеризованного индекса работает так же, как и ALTER INDEX ALL REBUILD.

Разрешенные действия на некластеризованных индексах, связанных с кластеризованным индексом, зависят от состояния (отключен или включен) обоих типов индекса. Следующая таблица обобщает разрешенные действия на некластеризованных индексах.

Действие некластеризованного индекса Если кластеризованные и некластеризованные индексы отключены Если кластеризованный индекс включен, а некластеризованный индекс находится в любом состоянии.
ALTER INDEX REBUILD Действие завершается сбоем Действие успешно выполнено
DROP INDEX Действие успешно выполнено Действие успешно выполнено
CREATE INDEX WITH DROP_EXISTING Действие завершается сбоем Действие успешно выполнено

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

Разрешения

Необходимо разрешение ALTER для таблицы или представления. При использовании DBCC DBREINDEXнеобходимо либо владеть таблицей, либо быть членом предопределенных ролей сервера sysadmin , либо членом db_ddladmin или db_owner предопределенных ролей базы данных.

Используйте SQL Server Management Studio

Включение отключенного индекса

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

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

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

  4. Выберите знак плюса, чтобы развернуть папку Indexes .

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

  6. В диалоговом окне "Перестроить индексы" убедитесь, что правильный индекс находится в индексах для перестроения сетки и нажмите кнопку "ОК".

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

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

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

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

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

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

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

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

Примеры кода в этой статье используют базу данных образца AdventureWorks2022 или AdventureWorksDW2022, которую можно скачать с домашней страницы образцов и проектов сообщества Microsoft SQL Server и.

Включение отключенного индекса с помощью ALTER INDEX

Выполните следующий сценарий Transact-SQL. Этот пример активирует индекс IX_Employee_OrganizationLevel_OrganizationNode в таблице HumanResources.Employee.

USE AdventureWorks2022;
GO

ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode
ON HumanResources.Employee REBUILD;
GO

Включение отключенного индекса с помощью CREATE INDEX

Выполните следующий скрипт Transact-SQL. В этом примере на таблице HumanResources.Employee создается IX_Employee_OrganizationLevel_OrganizationNode индекс с использованием столбцов OrganizationLevel и OrganizationNode, а затем удаляется существующий IX_Employee_OrganizationLevel_OrganizationNode индекс.

USE AdventureWorks2022;
GO

CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode
ON HumanResources.Employee(OrganizationLevel, OrganizationNode) WITH (DROP_EXISTING = ON);
GO

Включение отключенного индекса с помощью DBCC DBREINDEX

Замечание

Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.

Выполните следующий скрипт Transact-SQL. Этот пример включает IX_Employee_OrganizationLevel_OrganizationNode индекс на HumanResources.Employee таблице.

USE AdventureWorks2022;
GO

DBCC DBREINDEX ("HumanResources.Employee", IX_Employee_OrganizationLevel_OrganizationNode);
GO

Включение всех индексов в таблице с помощью ALTER INDEX

Выполните следующий скрипт Transact-SQL. Этот пример активирует все индексы в таблице HumanResources.Employee.

USE AdventureWorks2022;
GO

ALTER INDEX ALL
ON HumanResources.Employee REBUILD;
GO

Включение всех индексов в таблице с помощью DBCC DBREINDEX

Замечание

Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.

Выполните следующий скрипт Transact-SQL. Этот пример включает все индексы в HumanResources.Employee таблице.

USE AdventureWorks2022;
GO

DBCC DBREINDEX ("HumanResources.Employee", " ");
GO