DROP INDEX (Transact-SQL)DROP INDEX (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL AzureдаХранилище данных SQL AzureдаParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Удаляет один или несколько реляционных, пространственных, фильтруемых или XML-индексов из текущей базы данных.Removes one or more relational, spatial, filtered, or XML indexes from the current database. Можно удалить кластеризованный индекс и переместить полученную в результате таблицу в другую файловую группу или схему секционирования в одной транзакции, указав параметр MOVE TO.You can drop a clustered index and move the resulting table to another filegroup or partition scheme in a single transaction by specifying the MOVE TO option.

Инструкция DROP INDEX неприменима к индексам, созданным при указании ограничений параметров PRIMARY KEY и UNIQUE.The DROP INDEX statement does not apply to indexes created by defining PRIMARY KEY or UNIQUE constraints. Для удаления ограничения и соответствующего индекса используется инструкция ALTER TABLE с предложением DROP CONSTRAINT.To remove the constraint and corresponding index, use ALTER TABLE with the DROP CONSTRAINT clause.

Важно!

Синтаксис, определяемый в <drop_backward_compatible_index>, не будет поддерживаться в будущих версиях MicrosoftMicrosoftSQL ServerSQL Server.The syntax defined in <drop_backward_compatible_index> will be removed in a future version of MicrosoftMicrosoftSQL ServerSQL Server. Избегайте использования этого синтаксиса в новых разработках и учитывайте необходимость изменения в будущем приложений, использующих эти функции сейчас.Avoid using this syntax in new development work, and plan to modify applications that currently use the feature. Используйте синтаксис, описанный в <drop_relational_or_xml_index>.Use the syntax specified under <drop_relational_or_xml_index> instead. XML-индексы нельзя удалить с использованием обратно совместимого синтаксиса.XML indexes cannot be dropped using backward compatible syntax.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

-- Syntax for SQL Server (All options except filegroup and filestream apply to Azure SQL Database.)  
  
DROP INDEX [ IF EXISTS ]   
{ <drop_relational_or_xml_or_spatial_index> [ ,...n ]   
| <drop_backward_compatible_index> [ ,...n ]  
}  
  
<drop_relational_or_xml_or_spatial_index> ::=  
    index_name ON <object>   
    [ WITH ( <drop_clustered_index_option> [ ,...n ] ) ]  
  
<drop_backward_compatible_index> ::=  
    [ owner_name. ] table_or_view_name.index_name  
  
<object> ::=  
{ database_name.schema_name.table_or_view_name | schema_name.table_or_view_name | table_or_view_name }  
  
<drop_clustered_index_option> ::=  
{  
    MAXDOP = max_degree_of_parallelism  
  | ONLINE = { ON | OFF }  
  | MOVE TO { partition_scheme_name ( column_name )   
            | filegroup_name  
            | "default"   
            }  
  [ FILESTREAM_ON { partition_scheme_name   
            | filestream_filegroup_name   
            | "default" } ]  
}  
-- Syntax for Azure SQL Database  
  
DROP INDEX  
{ <drop_relational_or_xml_or_spatial_index> [ ,...n ]   
}  
  
<drop_relational_or_xml_or_spatial_index> ::=   
    index_name ON <object>  
  
<object> ::=   
{ database_name.schema_name.table_or_view_name | schema_name.table_or_view_name | table_or_view_name }  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
DROP INDEX index_name ON { database_name.schema_name.table_name | schema_name.table_name | table_name }  
[;]  

АргументыArguments

IF EXISTSIF EXISTS
Применимо к: SQL ServerSQL ServerSQL Server 2016 (13.x)SQL Server 2016 (13.x) до текущей версии).Applies to: SQL ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) through current version).

Условное удаление индекса только в том случае, если он уже существует.Conditionally drops the index only if it already exists.

index_nameindex_name
Имя индекса, который необходимо удалить.Is the name of the index to be dropped.

database_namedatabase_name
Имя базы данных.Is the name of the database.

schema_nameschema_name
Имя схемы, которой принадлежит таблица или представление.Is the name of the schema to which the table or view belongs.

table_or_view_nametable_or_view_name
Имя таблицы или представления, связанного с индексом.Is the name of the table or view associated with the index. Пространственные индексы поддерживаются только для таблиц.Spatial indexes are supported only on tables.

Чтобы отобразить отчет по индексам объекта, следует воспользоваться представлением каталога sys.indexes.To display a report of the indexes on an object, use the sys.indexes catalog view.

База данных SQL Windows Azure поддерживает формат трехкомпонентного имени database_name.[schema_name].object_name, если database_name — это текущая база данных или database_name — это tempdb и object_name начинается с символа «#».Windows Azure SQL Database supports the three-part name format database_name.[schema_name].object_name when the database_name is the current database or the database_name is tempdb and the object_name starts with #.

<drop_clustered_index_option><drop_clustered_index_option>
Применимо к: с SQL Server 2008SQL Server 2008 до SQL Server 2017SQL Server 2017, База данных SQLSQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, База данных SQLSQL Database.

Управляет параметрами кластеризованного индекса.Controls clustered index options. Эти параметры неприменимы к другим типам индексов.These options cannot be used with other index types.

MAXDOP = max_degree_of_parallelismMAXDOP = max_degree_of_parallelism
Применимо к: с SQL Server 2008SQL Server 2008 до SQL Server 2017SQL Server 2017, База данных SQLSQL Database (уровни производительности P2 и P3).Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, База данных SQLSQL Database (Performance Levels P2 and P3 only).

Переопределяет параметр конфигурации max degree of parallelism на время выполнения операции с индексами.Overrides the max degree of parallelism configuration option for the duration of the index operation. Дополнительные сведения см. в разделе Настройка параметра конфигурации сервера max degree of parallelism.For more information, see Configure the max degree of parallelism Server Configuration Option. MAXDOP можно использовать для ограничения числа процессоров, используемых при параллельном выполнении планов.Use MAXDOP to limit the number of processors used in a parallel plan execution. Максимальное число процессоров — 64.The maximum is 64 processors.

Важно!

Параметр MAXDOP нельзя использовать для пространственных или XML-индексов.MAXDOP is not allowed for spatial indexes or XML indexes.

Параметр max_degree_of_parallelism может иметь одно из следующих значений:max_degree_of_parallelism can be:

11
Подавляет формирование параллельных планов.Suppresses parallel plan generation.

>1>1
Ограничивает указанным значением максимальное число процессоров, используемых для параллельных операций с индексами.Restricts the maximum number of processors used in a parallel index operation to the specified number.

0 (по умолчанию)0 (default)
В зависимости от текущей рабочей нагрузки системы использует реальное или меньшее число процессоров.Uses the actual number of processors or fewer based on the current system workload.

Дополнительные сведения см. в статье Настройка параллельных операций с индексами.For more information, see Configure Parallel Index Operations.

Примечание

Параллельные операции с индексами доступны не во всех выпусках SQL ServerSQL Server.Parallel index operations are not available in every edition of SQL ServerSQL Server. Сведения о функциях, поддерживаемых различными выпусками SQL ServerSQL Server, см. в статье Возможности, поддерживаемые различными выпусками SQL Server 2016.For a list of features that are supported by the editions of SQL ServerSQL Server, see Editions and Supported Features for SQL Server 2016.

ONLINE = ON | OFFONLINE = ON | OFF
Применимо к: с SQL Server 2008SQL Server 2008 до SQL Server 2017SQL Server 2017, База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, База данных SQL AzureAzure SQL Database.

Определяет, будут ли базовые таблицы и связанные индексы доступны для запросов и изменения данных во время операций с индексами.Specifies whether underlying tables and associated indexes are available for queries and data modification during the index operation. Значение по умолчанию — OFF.The default is OFF.

ONON
Не устанавливаются долгосрочные блокировки таблицы.Long-term table locks are not held. Это позволяет продолжать выполнение запросов и обновлений базовых таблиц.This allows queries or updates to the underlying table to continue.

OFFOFF
Применяются блокировки таблиц, при этом таблицы становятся недоступны на время выполнения индексирования.Table locks are applied and the table is unavailable for the duration of the index operation.

Параметр ONLINE можно указать только при удалении кластеризованных индексов.The ONLINE option can only be specified when you drop clustered indexes. Дополнительные сведения см. в разделе «Примечания».For more information, see the Remarks section.

Примечание

Операции с индексами в сети доступны не во всех выпусках SQL ServerSQL Server.Online index operations are not available in every edition of SQL ServerSQL Server. Сведения о функциях, поддерживаемых различными выпусками SQL ServerSQL Server, см. в статье Возможности, поддерживаемые различными выпусками SQL Server 2016.For a list of features that are supported by the editions of SQL ServerSQL Server, see Editions and Supported Features for SQL Server 2016.

MOVE TO { partition_scheme_name ( column_name ) | filegroup_name | " default "MOVE TO { partition_scheme_name(column_name) | filegroup_name | " default "
Применимо к: с SQL Server 2008SQL Server 2008 до SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017. База данных SQLSQL Database поддерживает "default" в качестве имени файловой группы.supports "default" as the filegroup name.

Определяет размещение, куда будут перемещаться строки данных, находящиеся на конечном уровне кластеризованного индекса.Specifies a location to move the data rows that currently are in the leaf level of the clustered index. Данные перемещаются в новое расположение со структурой типа куча.The data is moved to the new location in the form of a heap. В качестве нового расположения можно указать файловую группу или схему секционирования, но они должны уже существовать.You can specify either a partition scheme or filegroup as the new location, but the partition scheme or filegroup must already exist. Параметр MOVE TO недопустим для индексированных представлений и некластеризованных индексов.MOVE TO is not valid for indexed views or nonclustered indexes. Если ни схема секционирования, ни файловая группа не указаны, результирующая таблица помещается в схему секционирования или файловую группу, которая определена для кластеризованного индекса.If a partition scheme or filegroup is not specified, the resulting table will be located in the same partition scheme or filegroup as was defined for the clustered index.

Если кластеризованный индекс удаляется с помощью параметра MOVE TO, то все некластеризованные индексы базовых таблиц создаются заново, но остаются в исходных файловых группах или схемах секционирования.If a clustered index is dropped by using MOVE TO, any nonclustered indexes on the base table are rebuilt, but they remain in their original filegroups or partition schemes. Если базовая таблица перемещается в другую файловую группу или схему секционирования, некластеризованные индексы не перемещаются для совпадения с новым расположением базовой таблицы (кучи).If the base table is moved to a different filegroup or partition scheme, the nonclustered indexes are not moved to coincide with the new location of the base table (heap). Поэтому некластеризованные индексы могут потерять выравнивание с кучей, даже если ранее они были выровнены с кластеризованным индексом.Therefore, even if the nonclustered indexes were previously aligned with the clustered index, they might no longer be aligned with the heap. Дополнительные сведения о выравнивании секционированных индексов см. в разделе Секционированные таблицы и индексы.For more information about partitioned index alignment, see Partitioned Tables and Indexes.

partition_scheme_name ( column_name )partition_scheme_name ( column_name )
Применимо к: с SQL Server 2008SQL Server 2008 до SQL Server 2017SQL Server 2017, База данных SQLSQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, База данных SQLSQL Database.

Указывает схему секционирования, в которой будет размещена результирующая таблица.Specifies a partition scheme as the location for the resulting table. Схема секционирования должна быть создана заранее выполнением инструкции CREATE PARTITION SCHEME или ALTER PARTITION SCHEME.The partition scheme must have already been created by executing either CREATE PARTITION SCHEME or ALTER PARTITION SCHEME. Если размещение не указано и таблица секционирована, таблица включается в ту же схему секционирования, где размещен существующий кластеризованный индекс.If no location is specified and the table is partitioned, the table is included in the same partition scheme as the existing clustered index.

Имя столбца в схеме не обязательно должно соответствовать столбцам из определения индекса.The column name in the scheme is not restricted to the columns in the index definition. Можно указать любой столбец базовой таблицы.Any column in the base table can be specified.

filegroup_namefilegroup_name
Применимо к: с SQL Server 2008SQL Server 2008 до SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Указывает файловую группу, в которую будет помещена результирующая таблица.Specifies a filegroup as the location for the resulting table. Если размещение не указано и таблица не секционирована, тогда результирующая таблица включается в ту файловую группу, где размещен существующий кластеризованный индекс.If no location is specified and the table is not partitioned, the resulting table is included in the same filegroup as the clustered index. Файловая группа должна существовать.The filegroup must already exist.

" default "" default "
Указывает размещение по умолчанию для результирующей таблицы.Specifies the default location for the resulting table.

Примечание

В этом контексте default не является ключевым словом.In this context, default is not a keyword. Это идентификатор файловой группы по умолчанию, и поэтому он должен быть заключен в разделители, например: MOVE TO " default " или MOVE TO [ default ] .It is an identifier for the default filegroup and must be delimited, as in MOVE TO " default " or MOVE TO [ default ]. Если указывается параметр " default " , то параметр QUOTED_IDENTIFIER для текущего сеанса должен иметь значение ON.If " default " is specified, the QUOTED_IDENTIFIER option must be set ON for the current session. Это параметр по умолчанию.This is the default setting. Дополнительные сведения см. в статье SET QUOTED_IDENTIFIER (Transact-SQL).For more information, see SET QUOTED_IDENTIFIER (Transact-SQL).

FILESTREAM_ON { partition_scheme_name | filestream_filegroup_name | " default " }FILESTREAM_ON { partition_scheme_name | filestream_filegroup_name | " default " }
Применимо к: с SQL Server 2008SQL Server 2008 до SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Определяет папку, в которую будет перемещаться таблица FILESTREAM, находящаяся на конечном уровне кластеризованного индекса.Specifies a location to move the FILESTREAM table that currently is in the leaf level of the clustered index. Данные перемещаются в новое расположение со структурой типа куча.The data is moved to the new location in the form of a heap. В качестве нового расположения можно указать файловую группу или схему секционирования, но они должны уже существовать.You can specify either a partition scheme or filegroup as the new location, but the partition scheme or filegroup must already exist. Параметр FILESTREAM ON недопустим для индексированных представлений или некластеризованных индексов.FILESTREAM ON is not valid for indexed views or nonclustered indexes. Если не указана схема секционирования, то данные будут размещены в той же схеме секционирования или файловой группе, которая была определена для кластеризованного индекса.If a partition scheme is not specified, the data will be located in the same partition scheme as was defined for the clustered index.

partition_scheme_namepartition_scheme_name
Указывает схему секционирования для данных FILESTREAM.Specifies a partition scheme for the FILESTREAM data. Схема секционирования должна быть создана заранее выполнением инструкции CREATE PARTITION SCHEME или ALTER PARTITION SCHEME.The partition scheme must have already been created by executing either CREATE PARTITION SCHEME or ALTER PARTITION SCHEME. Если размещение не указано и таблица секционирована, таблица включается в ту же схему секционирования, где размещен существующий кластеризованный индекс.If no location is specified and the table is partitioned, the table is included in the same partition scheme as the existing clustered index.

При указании схемы секционирования для инструкции MOVE TO необходимо использовать ту же схему секционирования, что и для инструкции FILESTREAM ON.If you specify a partition scheme for MOVE TO, you must use the same partition scheme for FILESTREAM ON.

filestream_filegroup_namefilestream_filegroup_name
Указывает файловую группу FILESTREAM для данных FILESTREAM.Specifies a FILESTREAM filegroup for FILESTREAM data. Если расположение не указано, а таблица не секционирована, данные включаются в файловую группу FILESTREAM по умолчанию.If no location is specified and the table is not partitioned, the data is included in the default FILESTREAM filegroup.

" default "" default "
Указывает расположение по умолчанию для данных FILESTREAM.Specifies the default location for the FILESTREAM data.

Примечание

В этом контексте default не является ключевым словом.In this context, default is not a keyword. Это идентификатор файловой группы по умолчанию, и поэтому он должен быть заключен в разделители, например: MOVE TO " default " или MOVE TO [ default ] .It is an identifier for the default filegroup and must be delimited, as in MOVE TO " default " or MOVE TO [ default ]. Если указано значение "default" (по умолчанию), параметр QUOTED_IDENTIFIER должен иметь значение ON для текущего сеанса.If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. Это параметр по умолчанию.This is the default setting. Дополнительные сведения см. в статье SET QUOTED_IDENTIFIER (Transact-SQL).For more information, see SET QUOTED_IDENTIFIER (Transact-SQL).

RemarksRemarks

При удалении некластеризованного индекса его определение удаляется из метаданных, а страницы данных сбалансированного дерева индекса удаляются из файлов базы данных.When a nonclustered index is dropped, the index definition is removed from metadata and the index data pages (the B-tree) are removed from the database files. При удалении кластеризованного индекса определение индекса удаляется из метаданных, а строки данных, которые хранились на конечном уровне кластеризованного индекса, сохраняются в результирующей неупорядоченной таблице — куче.When a clustered index is dropped, the index definition is removed from metadata and the data rows that were stored in the leaf level of the clustered index are stored in the resulting unordered table, a heap. Все пространство, ранее занимаемое индексом, освобождается.All the space previously occupied by the index is regained. Оно может быть впоследствии использовано любым объектом базы данных.This space can then be used for any database object.

Индекс невозможно удалить, если файловая группа, в которой он размещен, находится в режиме вне сети или доступна только для чтения.An index cannot be dropped if the filegroup in which it is located is offline or set to read-only.

Если удален кластеризованный индекс индексированного представления, то все некластеризованные индексы и автоматически создаваемые статистики в этом представлении автоматически удаляются.When the clustered index of an indexed view is dropped, all nonclustered indexes and auto-created statistics on the same view are automatically dropped. Статистики, созданные вручную, не удаляются.Manually created statistics are not dropped.

Синтаксис table_or_view_name . index_name сохраняется для обратной совместимости.The syntax table_or_view_name.index_name is maintained for backward compatibility. Пространственный или XML-индекс нельзя удалить с использованием синтаксиса обратной совместимости.An XML index or spatial index cannot be dropped by using the backward compatible syntax.

Если удаляемый индекс содержит 128 и более экстентов, компонент Компонент Database EngineDatabase Engine откладывает действительное освобождение страниц и связанных с ними блокировок до фиксации транзакции.When indexes with 128 extents or more are dropped, the Компонент Database EngineDatabase Engine defers the actual page deallocations, and their associated locks, until after the transaction commits.

Иногда индексы удаляются и пересоздаются для реорганизации или перестроения индекса, например чтобы применить новое значение коэффициента заполнения, или для реорганизации данных после массовой загрузки.Sometimes indexes are dropped and re-created to reorganize or rebuild the index, such as to apply a new fill factor value or to reorganize data after a bulk load. Для этих задач более эффективно использование инструкции ALTER INDEX, особенно для кластеризованных индексов.To do this, using ALTER INDEXis more efficient, especially for clustered indexes. Инструкция ALTER INDEX REBUILD выполняется с оптимизациями, предотвращающими дополнительные издержки на перестройку некластеризованных индексов.ALTER INDEX REBUILD has optimizations to prevent the overhead of rebuilding the nonclustered indexes.

Использование параметров инструкции DROP INDEXUsing Options with DROP INDEX

При удалении кластеризованного индекса можно установить следующие параметры: MAXDOP, ONLINE и MOVE TO.You can set the following index options when you drop a clustered index: MAXDOP, ONLINE, and MOVE TO.

Используйте параметр MOVE TO, чтобы удалить кластеризованный индекс и переместить результирующую таблицу в другую файловую группу или схему секционирования в одной транзакции.Use MOVE TO to drop the clustered index and move the resulting table to another filegroup or partition scheme in a single transaction.

При присвоении параметру ONLINE значения ON запросы и изменения базовых данных и связанных некластеризованных индексов не блокируются во время выполнения транзакции DROP INDEX.When you specify ONLINE = ON, queries and modifications to the underlying data and associated nonclustered indexes are not blocked by the DROP INDEX transaction. В режиме в сети одновременно может удаляться только один кластеризованный индекс.Only one clustered index can be dropped online at a time. Полное описание параметра ONLINE см. в разделе CREATE INDEX (Transact-SQL).For a complete description of the ONLINE option, see CREATE INDEX (Transact-SQL).

Кластеризованный индекс нельзя удалить в режиме в сети, если индекс недоступен в представлении или содержит столбцы типа text, ntext, image, varchar(max) , nvarchar(max) , varbinary(max) или xml в строках данных конечного уровня.You cannot drop a clustered index online if the index is disabled on a view, or contains text, ntext, image, varchar(max), nvarchar(max), varbinary(max), or xml columns in the leaf-level data rows.

Использование параметров ONLINE = ON и MOVE TO требует дополнительного временного места на диске.Using the ONLINE = ON and MOVE TO options requires additional temporary disk space.

После удаления индекса результирующая куча появляется в представлении каталога sys.indexes со значением NULL в столбце name.After an index is dropped, the resulting heap appears in the sys.indexes catalog view with NULL in the name column. Для просмотра имени таблицы выполните соединение sys.indexes с sys.tables по object_id.To view the table name, join sys.indexes with sys.tables on object_id. Пример запроса см. в примере Г.For an example query, see example D.

На многопроцессорных компьютерах под управлением SQL Server 2005 Enterprise EditionSQL Server 2005 Enterprise Edition или выше инструкция DROP INDEX может использовать больше процессоров для операций просмотра и сортировки, связанных с удалением кластеризованного индекса, как и в случаях с другими инструкциями.On multiprocessor computers that are running SQL Server 2005 Enterprise EditionSQL Server 2005 Enterprise Edition or later, DROP INDEX may use more processors to perform the scan and sort operations associated with dropping the clustered index, just like other queries do. Можно вручную настроить число процессоров, применяемых для запуска инструкции DROP INDEX, указав параметр индекса MAXDOP.You can manually configure the number of processors that are used to run the DROP INDEX statement by specifying the MAXDOP index option. Дополнительные сведения см. в статье Настройка параллельных операций с индексами.For more information, see Configure Parallel Index Operations.

При удалении кластеризованного индекса соответствующие секции кучи сохраняют настройки сжатия данных, если только не была изменена схема секционирования.When a clustered index is dropped, the corresponding heap partitions retain their data compression setting unless the partitioning scheme is modified. Если схема секционирования подверглась изменениям, все секции перестраиваются в распакованное состояние (DATA_COMPRESSION = NONE).If the partitioning scheme is changed, all partitions are rebuilt to an uncompressed state (DATA_COMPRESSION = NONE). Чтобы удалить кластеризованный индекс и изменить схему секционирования, необходимо выполнить следующие шаги.To drop a clustered index and change the partitioning scheme requires the following two steps:

  1. Удалить кластеризованный индекс.Drop the clustered index.

  2. Изменить таблицу с помощью инструкции ALTER TABLE ... и параметра REBUILD ..., определяющего степень сжатия.Modify the table by using an ALTER TABLE ... REBUILD ... option specifying the compression option.

При удалении кластеризованного индекса в режиме не в сети удаляются только верхние уровни кластеризованных индексов, следовательно, операция выполняется довольно быстро.When a clustered index is dropped OFFLINE, only the upper levels of clustered indexes are removed; therefore, the operation is quite fast. При удалении кластеризованного индекса в режиме ONLINE SQL ServerSQL Server перестраивает кучу два раза: один для первого шага, один для второго.When a clustered index is dropped ONLINE, SQL ServerSQL Server rebuilds the heap two times, once for step 1 and once for step 2. Дополнительную информацию о сжатии данных см. в разделе Сжатие данных.For more information about data compression, see Data Compression.

XML-индексыXML Indexes

При удалении XML-индекса нельзя указывать параметры.Options cannot be specified when you drop anXML index. Кроме того, нельзя использовать синтаксис table_or_view_name . index_name.Also, you cannot use the table_or_view_name.index_name syntax. При удалении первичного XML-индекса все связанные вторичные XML-индексы удаляются автоматически.When a primary XML index is dropped, all associated secondary XML indexes are automatically dropped. Дополнительные сведения см в разделе XML-индексы (SQL Server).For more information, see XML Indexes (SQL Server).

Пространственные индексыSpatial Indexes

Пространственные индексы поддерживаются только для таблиц.Spatial indexes are supported only on tables. При удалении пространственного индекса нельзя указывать любые параметры или использовать . index_name.When you drop a spatial index, you cannot specify any options or use .index_name. Правильный синтаксис:The correct syntax is as follows:

DROP INDEX spatial_index_name ON spatial_table_name;DROP INDEX spatial_index_name ON spatial_table_name;

Дополнительные сведения о пространственных индексах см. в разделе Общие сведения о пространственных индексах.For more information about spatial indexes, see Spatial Indexes Overview.

РазрешенияPermissions

Для выполнения инструкции DROP INDEX как минимум требуется разрешение ALTER для таблицы или представления.To execute DROP INDEX, at a minimum, ALTER permission on the table or view is required. По умолчанию это разрешение предоставляется предопределенной роли сервера sysadmin и предопределенным ролям базы данных db_ddladmin и db_owner .This permission is granted by default to the sysadmin fixed server role and the db_ddladmin and db_owner fixed database roles.

ПримерыExamples

A.A. Удаление индексаDropping an index

В следующем примере показано, как удалить индекс IX_ProductVendor_VendorID в таблице ProductVendor базы данных AdventureWorks2012AdventureWorks2012.The following example deletes the index IX_ProductVendor_VendorID on the ProductVendor table in the AdventureWorks2012AdventureWorks2012 database.

DROP INDEX IX_ProductVendor_BusinessEntityID   
    ON Purchasing.ProductVendor;  
GO  

Б.B. Удаление нескольких индексовDropping multiple indexes

В следующем примере показано, как удалить два индекса в одной транзакции в базе данных AdventureWorks2012AdventureWorks2012.The following example deletes two indexes in a single transaction in the AdventureWorks2012AdventureWorks2012 database.

DROP INDEX  
    IX_PurchaseOrderHeader_EmployeeID ON Purchasing.PurchaseOrderHeader,  
    IX_Address_StateProvinceID ON Person.Address;  
GO  

В.C. Удаление кластеризованного индекса в режиме в сети и установка параметра MAXDOPDropping a clustered index online and setting the MAXDOP option

В следующем примере удаляется кластеризованный индекс с параметром ONLINE, установленным в значение ON и параметром MAXDOP, установленным в значение 8.The following example deletes a clustered index with the ONLINE option set to ON and MAXDOP set to 8. Поскольку параметр MOVE TO не был указан, результирующая таблица сохраняется в той же файловой группе, что и индекс.Because the MOVE TO option was not specified, the resulting table is stored in the same filegroup as the index. В этих примерах используется база данных AdventureWorks2012AdventureWorks2012This examples uses the AdventureWorks2012AdventureWorks2012 database

Применимо к: с SQL Server 2008SQL Server 2008 до SQL Server 2017SQL Server 2017, База данных SQLSQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, База данных SQLSQL Database.

DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate   
    ON Production.BillOfMaterials WITH (ONLINE = ON, MAXDOP = 2);  
GO  

Г.D. Удаление кластеризованного индекса в режиме в сети и перемещение таблицы в другую файловую группуDropping a clustered index online and moving the table to a new filegroup

В следующем примере кластеризованный индекс удаляется в режиме в сети и результирующая таблица (куча) перемещается в файловую группу NewGroup с использованием предложения MOVE TO .The following example deletes a clustered index online and moves the resulting table (heap) to the filegroup NewGroup by using the MOVE TO clause. Представления каталога sys.indexes, sys.tablesи sys.filegroups запрашиваются для проверки размещения индекса и таблицы в файловых группах до и после перемещения.The sys.indexes, sys.tables, and sys.filegroups catalog views are queried to verify the index and table placement in the filegroups before and after the move. (Начиная с версии SQL Server 2016 (13.x)SQL Server 2016 (13.x) можно использовать синтаксис DROP INDEX IF EXISTS.)(Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x) you can use the DROP INDEX IF EXISTS syntax.)

Применимо к: с SQL Server 2008SQL Server 2008 до SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

--Create a clustered index on the PRIMARY filegroup if the index does not exist.  
CREATE UNIQUE CLUSTERED INDEX  
    AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate   
        ON Production.BillOfMaterials (ProductAssemblyID, ComponentID,   
        StartDate)  
    ON 'PRIMARY';  
GO  
-- Verify filegroup location of the clustered index.  
SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,  
    i.data_space_id, f.name AS [Filegroup Name]  
FROM sys.indexes AS i  
    JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id  
    JOIN sys.tables as t ON i.object_id = t.object_id  
        AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U')  
GO  
--Create filegroup NewGroup if it does not exist.  
IF NOT EXISTS (SELECT name FROM sys.filegroups  
                WHERE name = N'NewGroup')  
    BEGIN  
    ALTER DATABASE AdventureWorks2012  
        ADD FILEGROUP NewGroup;  
    ALTER DATABASE AdventureWorks2012  
        ADD FILE (NAME = File1,  
            FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\File1.ndf')  
        TO FILEGROUP NewGroup;  
    END  
GO  
--Verify new filegroup  
SELECT * from sys.filegroups;  
GO  
-- Drop the clustered index and move the BillOfMaterials table to  
-- the Newgroup filegroup.  
-- Set ONLINE = OFF to execute this example on editions other than Enterprise Edition.  
DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate   
    ON Production.BillOfMaterials   
    WITH (ONLINE = ON, MOVE TO NewGroup);  
GO  
-- Verify filegroup location of the moved table.  
SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,  
    i.data_space_id, f.name AS [Filegroup Name]  
FROM sys.indexes AS i  
    JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id  
    JOIN sys.tables as t ON i.object_id = t.object_id  
        AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U');  
GO  

Д.E. Удаление ограничения PRIMARY KEY в режиме в сетиDropping a PRIMARY KEY constraint online

Индексы, созданные в результате создания ограничений параметров PRIMARY KEY или UNIQUE, нельзя удалить с помощью инструкции DROP INDEX.Indexes that are created as the result of creating PRIMARY KEY or UNIQUE constraints cannot be dropped by using DROP INDEX. Они удаляются с помощью инструкции ALTER TABLE DROP CONSTRAINT.They are dropped using the ALTER TABLE DROP CONSTRAINT statement. Дополнительные сведения см. в разделе ALTER TABLE.For more information, see ALTER TABLE.

Следующий пример иллюстрирует удаление кластеризованного индекса с ограничением PRIMARY KEY путем удаления ограничения.The following example deletes a clustered index with a PRIMARY KEY constraint by dropping the constraint. У таблицы ProductCostHistory нет ограничений FOREIGN KEY.The ProductCostHistory table has no FOREIGN KEY constraints. Если бы они были, необходимо было бы сначала удалить их.If it did, those constraints would have to be removed first.

-- Set ONLINE = OFF to execute this example on editions other than Enterprise Edition.  
ALTER TABLE Production.TransactionHistoryArchive  
DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID  
WITH (ONLINE = ON);  

Е.F. Удаление XML-индексаDropping an XML index

В следующем примере показано, как удалить XML-индекс в таблице ProductModel базы данных AdventureWorks2012AdventureWorks2012.The following example drops an XML index on the ProductModel table in the AdventureWorks2012AdventureWorks2012 database.

DROP INDEX PXML_ProductModel_CatalogDescription   
    ON Production.ProductModel;  

Ж.G. Удаление кластеризованного индекса для таблицы FILESTREAMDropping a clustered index on a FILESTREAM table

В следующем примере кластеризованный индекс удаляется в режиме в сети и результирующая таблица (куча) вместе с данными FILESTREAM перемещается в схему секционирования MyPartitionScheme с использованием предложений MOVE TO и FILESTREAM ON.The following example deletes a clustered index online and moves the resulting table (heap) and FILESTREAM data to the MyPartitionScheme partition scheme by using both the MOVE TO clause and the FILESTREAM ON clause.

Применимо к: с SQL Server 2008SQL Server 2008 до SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

DROP INDEX PK_MyClusteredIndex   
    ON dbo.MyTable   
    WITH (MOVE TO MyPartitionScheme,  
          FILESTREAM_ON MyPartitionScheme);  
GO  

См. также:See Also

ALTER INDEX (Transact-SQL) ALTER INDEX (Transact-SQL)
ALTER PARTITION SCHEME (Transact-SQL) ALTER PARTITION SCHEME (Transact-SQL)
ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL)
CREATE INDEX (Transact-SQL) CREATE INDEX (Transact-SQL)
CREATE PARTITION SCHEME (Transact-SQL) CREATE PARTITION SCHEME (Transact-SQL)
CREATE SPATIAL INDEX (Transact-SQL) CREATE SPATIAL INDEX (Transact-SQL)
CREATE XML INDEX (Transact-SQL) CREATE XML INDEX (Transact-SQL)
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
sys.indexes (Transact-SQL) sys.indexes (Transact-SQL)
sys.tables (Transact-SQL) sys.tables (Transact-SQL)
sys.filegroups (Transact-SQL) sys.filegroups (Transact-SQL)
sp_spaceused (Transact-SQL)sp_spaceused (Transact-SQL)