Отключение индексов и ограниченийDisable Indexes and Constraints

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL DatabaseПрименимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database

В этом разделе описывается отключение индекса или ограничений в SQL ServerSQL Server с помощью SQL Server Management StudioSQL Server Management Studio или Transact-SQLTransact-SQL.This topic describes how to disable an index or constraints in SQL ServerSQL Server by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. Отключение индексов предотвращает доступ пользователя к индексам в случае использования кластеризованных индексов к данным базовой таблицы.Disabling an index prevents user access to the index, and for clustered indexes to the underlying table data. Определение индекса остается в метаданных, и статистики индекса сохраняются на некластеризованных индексах.The index definition remains in metadata, and index statistics are kept on nonclustered indexes. Данные индекса при отключении некластеризованных или кластеризованных индексов в представлении удаляются физически.Disabling a nonclustered or clustered index on a view physically deletes the index data. Отключение кластеризованного индекса в таблице позволяет предотвратить доступ к данным; данные остаются в таблице, но являются недоступными для операций языка обработки данных DML до удаления или перестроения индекса.Disabling a clustered index on a table prevents access to the data; the data still remains in the table, but is unavailable for data manipulation language (DML) operations until the index is dropped or rebuilt.

В этом разделеIn This Topic

Перед началомBefore You Begin

ОграниченияLimitations and Restrictions

  • При отключении индекса он не обслуживается.The index is not maintained while it is disabled.

  • Оптимизатор запросов не учитывает отключенные индексы при создании планов выполнения запроса.The query optimizer does not consider the disabled index when creating query execution plans. Запросы, ссылающиеся на отключенные индексы с помощью табличного указания, также завершаются сбоем.Also, queries that reference the disabled index with a table hint fail.

  • Нельзя создавать индекс с именем, которое идентично имени существующего отключенного индекса.You cannot create an index that uses the same name as an existing disabled index.

  • Отключенный индекс может быть удален.A disabled index can be dropped.

  • При отключении уникального индекса также отключаются ограничения PRIMARY KEY, UNIQUE и все ограничения FOREIGN KEY, ссылающиеся на индексированные столбцы из других таблиц.When disabling a unique index, the PRIMARY KEY or UNIQUE constraint and all FOREIGN KEY constraints that reference the indexed columns from other tables are also disabled. При отключении кластеризованного индекса также отключаются все входящие и исходящие ограничения FOREIGN KEY для базовой таблицы.When disabling a clustered index, all incoming and outgoing FOREIGN KEY constraints on the underlying table are also disabled. При отключении индекса в предупреждающем сообщении приводятся имена ограничений.The constraint names are listed in a warning message when the index is disabled. После перестроения индекса необходимо вручную включить все ограничения с помощью инструкции ALTER TABLE CHECK CONSTRAINT.After rebuilding the index, all constraints must be manually enabled by using the ALTER TABLE CHECK CONSTRAINT statement.

  • Некластеризованные индексы автоматически отключаются при отключении связанных с ними кластеризованных индексов.Nonclustered indexes are automatically disabled when the associated clustered index is disabled. Они не могут быть включены до тех пор, пока не будет включен кластеризованный индекс таблицы или представления или пока не будет удален кластеризованный индекс таблицы.They cannot be enabled until either the clustered index on the table or view is enabled or the clustered index on the table is dropped. Некластеризованные индексы должны быть явно включены в том случае, если кластеризованные индексы не были включены ранее с помощью инструкции ALTER TABLE CHECK CONSTRAINT.Nonclustered indexes must be explicitly enabled, unless the clustered index was enabled by using the ALTER INDEX ALL REBUILD statement.

  • Инструкция ALTER INDEX ALL REBUILD перестраивает и включает все отключенные индексы таблицы, за исключением индексов представления.The ALTER INDEX ALL REBUILD statement rebuilds and enables all disabled indexes on the table, except for disabled indexes on views. Для включения индексов представлений используется отдельная инструкция ALTER INDEX ALL REBUILD.Indexes on views must be enabled in a separate ALTER INDEX ALL REBUILD statement.

  • При отключении кластеризованного индекса в таблице также отключаются все кластеризованные и некластеризованные индексы в представлениях, которые ссылаются на эту таблицу.Disabling a clustered index on a table also disables all clustered and nonclustered indexes on views that reference that table. Указанные индексы должны быть перестроены, так же как и индексы ссылочной таблицы.These indexes must be rebuilt just as those on the referenced table.

  • Доступ к строкам данных отключенного кластеризованного индекса не может быть осуществлен, за исключением удаления или перестроения кластеризованного индекса.The data rows of the disabled clustered index cannot be accessed except to drop or rebuild the clustered index.

  • Перестройка отключенных некластеризованных индексов в режиме в сети возможна, если таблица не содержит отключенные кластеризованные индексы.You can rebuild a disabled nonclustered index online when the table does not have a disabled clustered index. Однако при использовании инструкций ALTER INDEX REBUILD и CREATE INDEX WITH DROP_EXISTING отключенные кластеризованные индексы могут быть перестроены только в режиме вне сети.However, you must always rebuild a disabled clustered index offline if you use either the ALTER INDEX REBUILD or CREATE INDEX WITH DROP_EXISTING statement. Дополнительные сведения об операциях с индексами в сети см. в статье Выполнение операции с индексами в сети.For more information about online index operations, see Perform Index Operations Online.

  • Инструкция CREATE STATISTICS не может применяться к таблицам, содержащим отключенные кластеризованные индексы.The CREATE STATISTICS statement cannot be successfully executed on a table that has a disabled clustered index.

  • Параметр базы данных AUTO_CREATE_STATISTICS создает новые статистики для столбцов с отключенными индексами при выполнении следующих условий:The AUTO_CREATE_STATISTICS database option creates new statistics on a column when the index is disabled and the following conditions exist:

    • Параметр AUTO_CREATE_STATISTICS установлен в значение ONAUTO_CREATE_STATISTICS is set to ON

    • Для данного столбца не существует статистик.There are no existing statistics for the column.

    • Статистики необходимы при оптимизации запросов.Statistics are required during query optimization.

  • Если кластеризованные индексы отключены, то DBCC CHECKDB не может вернуть сведения о базовой таблице. Вместо этого результатом выполнения этой инструкции будет сообщение об отключенном кластеризованном индексе.If a clustered index is disabled, DBCC CHECKDB cannot return information about the underlying table; instead, the statement reports that the clustered index is disabled. Инструкция DBCC INDEXDEFRAG не может быть использована для дефрагментации отключенного индекса. В этом случае она возвращает сообщение об ошибке.DBCC INDEXDEFRAG cannot be used to defragment a disabled index; the statement fails with an error message. Инструкция DBCC DBREINDEX может быть использована для перестроения отключенного индекса.You can use DBCC DBREINDEX to rebuild a disabled index.

  • При создании нового кластеризованного индекса включаются ранее отключенные некластеризованные индексы.Creating a new clustered index enables previously disabled nonclustered indexes. Дополнительные сведения см. в статье Enable Indexes and Constraints.For more information, see Enable Indexes and Constraints.

безопасностьSecurity

PermissionsPermissions

Для выполнения ALTER INDEX необходимо иметь как минимум разрешение ALTER для таблицы или представления.To execute ALTER INDEX, at a minimum, ALTER permission on the table or view is required.

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

Отключение индексаTo disable an index

  1. В обозревателе объектов щелкните знак «плюс», чтобы развернуть базу данных, содержащую таблицу, в которой необходимо отключить индекс.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to disable an index.

  2. Чтобы развернуть папку Таблицы , щелкните значок «плюс».Click the plus sign to expand the Tables folder.

  3. Щелкните знак «плюс», чтобы развернуть таблицу, в которой необходимо отключить индекс.Click the plus sign to expand the table on which you want to disable an index.

  4. Чтобы развернуть папку Индексы , щелкните знак «плюс» (+).Click the plus sign to expand the Indexes folder.

  5. Щелкните правой кнопкой мыши индекс, который необходимо отключить, и выберите пункт Отключить.Right-click the index you want to disable and select Disable.

  6. В диалоговом окне Отключение индексов убедитесь, что нужный индекс указан в сетке Индексы для отключения , и нажмите кнопку ОК.In the Disable Indexes dialog box, verify that the correct index is in the Indexes to disable grid and click OK.

Отключение всех индексов таблицыTo disable all indexes on a table

  1. В обозревателе объектов щелкните знак «плюс», чтобы развернуть базу данных, содержащую таблицу, в которой необходимо отключить индексы.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to disable the indexes.

  2. Чтобы развернуть папку Таблицы , щелкните значок «плюс».Click the plus sign to expand the Tables folder.

  3. Щелкните знак «плюс», чтобы развернуть таблицу, в которой необходимо отключить индексы.Click the plus sign to expand the table on which you want to disable the indexes.

  4. Щелкните правой кнопкой мыши папку Индексы и выберите Отключить все.Right-click the Indexes folder and select Disable All.

  5. В диалоговом окне Отключение индексов убедитесь, что нужные индексы указаны в сетке Индексы для отключения , и нажмите кнопку ОК.In the Disable Indexes dialog box, verify that the correct indexes are in the Indexes to disable grid and click OK. Для удаления индекса из сетки Индексы для отключения выберите индекс и нажмите клавишу DELETE.To remove an index from the Indexes to disable grid, select the index and then press the Delete key.

В диалоговом окне Отключить индексы доступны следующие сведения:The following information is available in the Disable Indexes dialog box:

Index NameIndex Name
Отображает имя индекса.Displays the name of the index. В ходе выполнения в этом столбце также отображается значок, представляющий состояние.During execution, this column also displays an icon representing the status.

Имя таблицыTable Name
Отображает имя таблицы или представления, для которых был создан индекс.Displays the name of the table or view that the index was created on.

Тип индексаIndex Type
Отображает тип индекса: кластеризованный, некластеризованный, пространственный или XML.Displays the type of the index: Clustered, Nonclustered, Spatial, or XML.

СостояниеStatus
Отображает состояние операции отключения.Displays the status of the disable operation. Возможные значения после выполнения.Possible values after execution are:

  • ПустоBlank

    Состояние до выполнения является пустым.Prior to execution Status is blank.

  • ВыполняетсяIn progress

    Отключение индексов было начато, но еще не завершено.Disabling of the indexes has been started but is not complete.

  • УспешноSuccess

    Операция отключения успешно завершена.The disable operation completed successfully.

  • ErrorError

    При отключении индекса возникла ошибка, и операция отключения не была успешно завершена.An error was encountered during the index disable operation, and the operation did not complete successfully.

  • ОстановленаStopped

    Отключение индекса не было завершено успешно, поскольку пользователь остановил операцию.The disable of the index was not completed successfully because the user stopped the operation.

MessageMessage
Предоставляет текст сообщений об ошибках в ходе операции отключения.Provides the text of error messages during the disable operation. Во время выполнения ошибки отображаются в виде гиперссылок.During execution, errors appear as hyperlinks. Текст гиперссылок описывает тело ошибки.The text of the hyperlinks describes the body of the error. Столбец Сообщение редко имеет ширину, достаточную для прочтения всего текстового сообщения.The Message column is rarely wide enough to read the full message text. Есть два способа получить полный текст.There are two ways to get the full text:

  • Переместите указатель мыши на ячейку сообщения для вызова подсказки, содержащей текст ошибки.Move the mouse pointer over the message cell to display a ToolTip with the error text.

  • Щелкните гиперссылку, чтобы вызвать диалоговое окно, отображающее полный текст сообщения об ошибке.Click the hyperlink to display a dialog box displaying the full error.

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

Отключение индексаTo disable an index

  1. В обозревателе объектов подключитесь к экземпляру компонента Компонент Database EngineDatabase Engine.In Object Explorer, connect to an instance of Компонент Database EngineDatabase Engine.

  2. На стандартной панели выберите пункт Создать запрос.On the Standard bar, click New Query.

  3. Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить.Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;  
    GO  
    -- disables the IX_Employee_OrganizationLevel_OrganizationNode index  
    -- on the HumanResources.Employee table  
    ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
    DISABLE;  
    

Отключение всех индексов таблицыTo disable all indexes on a table

  1. В обозревателе объектов подключитесь к экземпляру компонента Компонент Database EngineDatabase Engine.In Object Explorer, connect to an instance of Компонент Database EngineDatabase Engine.

  2. На стандартной панели выберите пункт Создать запрос.On the Standard bar, click New Query.

  3. Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить.Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;  
    GO  
    -- Disables all indexes on the HumanResources.Employee table.  
    ALTER INDEX ALL ON HumanResources.Employee  
    DISABLE;  
    

Дополнительные сведения см. в разделе ALTER INDEX (Transact-SQL).For more information, see ALTER INDEX (Transact-SQL).