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

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

В этом разделе описывается, как включить отключенный индекс в 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. Не удалось выполнить операцию. Операция выполнена успешно.
  • При перестроении отключенных сжатых некластеризованных индексов параметр data_compression по умолчанию имеет значение none. Это означает, что индексы не будут сжиматься. Связано это с тем, что при отключении некластеризованных индексов метаданные параметров сжатия теряются. Чтобы обойти эту проблему, необходимо явно настроить сжатие данных в инструкции перестроения.

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

Разрешения

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    USE AdventureWorks2022;  
    GO  
    -- re-creates the IX_Employee_OrganizationLevel_OrganizationNode index  
    -- on the HumanResources.Employee table  
    -- using the OrganizationLevel and OrganizationNode columns  
    -- and then deletes the existing IX_Employee_OrganizationLevel_OrganizationNode index  
    CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
       (OrganizationLevel, OrganizationNode)  
    WITH (DROP_EXISTING = ON);  
    GO  
    

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

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

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

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

    USE AdventureWorks2022;   
    GO  
    -- enables the IX_Employee_OrganizationLevel_OrganizationNode index  
    -- on the HumanResources.Employee table  
    DBCC DBREINDEX ("HumanResources.Employee", IX_Employee_OrganizationLevel_OrganizationNode);  
    GO  
    

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

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

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

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

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

Использование инструкции DBCC DBREINDEX для включения всех индексов в таблице

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

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

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

    USE AdventureWorks2022;   
    GO  
    -- enables all indexes  
    -- on the HumanResources.Employee table  
    DBCC DBREINDEX ("HumanResources.Employee", " ");  
    GO  
    

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