Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: 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
Включение отключенного индекса
В обозревателе объектов выберите знак плюса, чтобы развернуть базу данных, содержащую таблицу, в которой требуется включить индекс.
Чтобы развернуть папку Таблицы, выберите значок "плюс".
Выберите знак плюса, чтобы развернуть таблицу, в которой требуется включить индекс.
Выберите знак плюса, чтобы развернуть папку Indexes .
Щелкните правой кнопкой мыши по индексу, который вы хотите активировать, и выберите Перестроить.
В диалоговом окне "Перестроить индексы" убедитесь, что правильный индекс находится в индексах для перестроения сетки и нажмите кнопку "ОК".
Включение всех индексов в таблице
В обозревателе объектов выберите знак плюса, чтобы развернуть базу данных, содержащую таблицу, в которой нужно включить индексы.
Чтобы развернуть папку Таблицы, выберите значок "плюс".
Выберите знак плюса, чтобы развернуть таблицу, в которой необходимо включить индексы.
Щелкните правой кнопкой мыши папку Индексы и выберите Перестроить все.
В диалоговом окне "Перестроение индексов" убедитесь, что правильные индексы находятся в индексах для перестроения сетки и нажмите кнопку "ОК". Для удаления индекса из сетки Индексы для перестроения выделите индекс и нажмите клавишу 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