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


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

Область применения: 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 (удаление индекса) Остается отключенным.
    СОЗДАТЬ ИНДЕКС С ОПЦИЕЙ DROP_EXISTING. Продолжает оставаться отключенным.

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

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

    Действие некластеризованного индекса Когда и кластеризованные, и некластеризованные индексы отключены. Когда кластеризованный индекс включен, а некластеризованный индекс находится в любом состоянии.
    ПЕРЕСТРОИТЬ ИНДЕКС. Действие не выполнено. Операция выполнена успешно.
    УДАЛИТЬ ИНДЕКС. Операция выполнена успешно. Операция выполнена успешно.
    СОЗДАТЬ ИНДЕКС С ПЕРЕЗАПИСЬЮ СУЩЕСТВУЮЩЕГО. Действие не выполнено. Операция выполнена успешно.
  • При перестроении отключенных сжатых некластеризованных индексов параметр 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).