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

Cette rubrique s’applique à : OuiSQL Server (à partir de 2008)Ouibase de données SQL AzureOuiAzure SQL Data Warehouse Oui Parallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Supprime un ou plusieurs index relationnels, spatiaux ou XML de la base de données active.Removes one or more relational, spatial, filtered, or XML indexes from the current database. Vous pouvez supprimer un index cluster et déplacer la table résultante vers un autre groupe de fichiers ou schéma de partition dans une transaction unique en spécifiant l'option 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.

L'instruction DROP INDEX ne s'applique pas aux index créés en définissant des contraintes PRIMARY KEY ou UNIQUE.The DROP INDEX statement does not apply to indexes created by defining PRIMARY KEY or UNIQUE constraints. Pour supprimer la contrainte et l’index correspondant, utilisez ALTER TABLE avec la clause DROP CONSTRAINT.To remove the constraint and corresponding index, use ALTER TABLE with the DROP CONSTRAINT clause.

Important

La syntaxe définie dans <drop_backward_compatible_index> sera supprimée dans une version ultérieure de MicrosoftMicrosoft SQL ServerSQL Server.The syntax defined in <drop_backward_compatible_index> will be removed in a future version of MicrosoftMicrosoft SQL ServerSQL Server. Évitez d'utiliser cette syntaxe dans de nouveaux travaux de développement et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.Avoid using this syntax in new development work, and plan to modify applications that currently use the feature. Utilisez plutôt la syntaxe spécifiée sous <drop_relational_or_xml_index>.Use the syntax specified under <drop_relational_or_xml_index> instead. Les index XML ne peuvent pas être supprimés à l'aide d'une syntaxe à compatibilité descendante.XML indexes cannot be dropped using backward compatible syntax.

Icône de lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

-- 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 ] . | schema_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 ] . | schema_name. ]   
    table_or_view_name  
}  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  

DROP INDEX index_name ON [ database_name . [schema_name ] . | schema_name . ] table_name  
[;]  

ArgumentsArguments

IF EXISTSIF EXISTS
S’applique à: SQL ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) jusqu’à version actuelle).Applies to: SQL ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) through current version).

Supprime, de manière conditionnelle, l’index uniquement s’il existe déjà.Conditionally drops the index only if it already exists.

index_nameindex_name
Nom de l'index à supprimer.Is the name of the index to be dropped.

database_namedatabase_name
Nom de la base de données.Is the name of the database.

schema_nameschema_name
Nom du schéma auquel la table ou la vue appartient.Is the name of the schema to which the table or view belongs.

table_or_view_nametable_or_view_name
Nom de la table ou de la vue associée à l'index.Is the name of the table or view associated with the index. Les index spatiaux sont pris en charge uniquement dans les tables.Spatial indexes are supported only on tables.

Pour afficher un rapport des index relatifs à un objet, utilisez la vue de catalogue sys.indexes.To display a report of the indexes on an object, use the sys.indexes catalog view.

Microsoft Azure SQL Database prend en charge le format de nom en trois parties nom_bd.[nom_schéma].nom_objet lorsque nom_bd est la base de données active, ou lorsque nom_bd est la base de données tempdb et nom_objet commence par #.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>
S’applique à: SQL Server 2008SQL Server 2008 jusqu’à SQL Server 2017SQL Server 2017, Base de données SQLSQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, Base de données SQLSQL Database.

Contrôle les options d'index cluster.Controls clustered index options. Ces options ne peuvent pas être utilisées avec d'autres types d'index.These options cannot be used with other index types.

MAXDOP = max_degree_of_parallelismMAXDOP = max_degree_of_parallelism
S’applique à : SQL Server 2008SQL Server 2008 jusqu’à SQL Server 2017SQL Server 2017, Base de données SQLSQL Database (niveaux de performance P2 et P3 uniquement).Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, Base de données SQLSQL Database (Performance Levels P2 and P3 only).

Remplace l’option de configuration max degree of parallelism pendant la durée de l’opération d’index.Overrides the max degree of parallelism configuration option for the duration of the index operation. Pour plus d’informations, consultez Configurer l’option de configuration du serveur max degree of parallelism.For more information, see Configure the max degree of parallelism Server Configuration Option. Utilisez MAXDOP pour limiter le nombre de processeurs utilisés dans une exécution de plan parallèle.Use MAXDOP to limit the number of processors used in a parallel plan execution. Le nombre maximal de processeurs est égal à 64.The maximum is 64 processors.

Important

MAXDOP n'est pas autorisé pour les index XML ou spatiaux.MAXDOP is not allowed for spatial indexes or XML indexes.

max_degree_of_parallelism peut être :max_degree_of_parallelism can be:

11
Supprime la création de plans parallèles.Suppresses parallel plan generation.

>1>1
Limite au nombre spécifié le nombre maximal de processeurs utilisés dans le traitement en parallèle des index.Restricts the maximum number of processors used in a parallel index operation to the specified number.

0 (valeur par défaut)0 (default)
Utilise le nombre réel de processeurs ou un nombre de processeurs inférieur en fonction de la charge de travail actuelle du système.Uses the actual number of processors or fewer based on the current system workload.

Pour plus d’informations, consultez Configurer des opérations d’index parallèles.For more information, see Configure Parallel Index Operations.

Note

Les opérations d'index parallèles ne sont pas disponibles dans toutes les éditions de SQL ServerSQL Server.Parallel index operations are not available in every edition of SQL ServerSQL Server. Pour obtenir la liste des fonctionnalités prises en charge par les éditions de SQL ServerSQL Server, consultez Fonctionnalités prises en charge par les éditions de 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
S’applique à: SQL Server 2008SQL Server 2008 jusqu’à SQL Server 2017SQL Server 2017, Azure SQL DatabaseAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, Azure SQL DatabaseAzure SQL Database.

Indique si les tables sous-jacentes et les index associés sont disponibles pour les requêtes et la modification de données pendant l'opération d'index.Specifies whether underlying tables and associated indexes are available for queries and data modification during the index operation. La valeur par défaut est OFF.The default is OFF.

ONON
Les verrous de table à long terme ne sont pas maintenus.Long-term table locks are not held. Cela permet aux requêtes ou mises à jour de la table sous-jacente de continuer.This allows queries or updates to the underlying table to continue.

OFFOFF
Les verrous de table sont appliqués et la table est indisponible pendant la durée de l'opération d'index.Table locks are applied and the table is unavailable for the duration of the index operation.

L'option ONLINE ne peut être spécifiée que lorsque vous supprimez des index clusters.The ONLINE option can only be specified when you drop clustered indexes. Pour plus d'informations, consultez la section Notes.For more information, see the Remarks section.

Note

Les opérations d'index en ligne ne sont pas disponibles dans toutes les éditions de SQL ServerSQL Server.Online index operations are not available in every edition of SQL ServerSQL Server. Pour obtenir la liste des fonctionnalités prises en charge par les éditions de SQL ServerSQL Server, consultez Fonctionnalités prises en charge par les éditions de 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"
S'applique à: SQL Server 2008SQL Server 2008 jusqu'à SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017. Base de données SQLSQL Database prend en charge « default » comme nom de groupe de fichiers. supports "default" as the filegroup name.

Spécifie un emplacement pour déplacer les lignes de données qui se trouvent actuellement au niveau feuille de l'index cluster.Specifies a location to move the data rows that currently are in the leaf level of the clustered index. Les données sont déplacées vers le nouvel emplacement sous la forme d'un segment de mémoire.The data is moved to the new location in the form of a heap. Vous pouvez spécifier un schéma de partition ou un groupe de fichiers déjà existants comme nouvel emplacement.You can specify either a partition scheme or filegroup as the new location, but the partition scheme or filegroup must already exist. MOVE TO n'est pas valide pour les vues non indexées ou les index non cluster.MOVE TO is not valid for indexed views or nonclustered indexes. Si aucun schéma de partition ou groupe de fichiers n'est spécifié, la table résultante sera située sur le même schéma de partition ou groupe de fichiers que celui défini pour l'index cluster.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.

Si un index cluster est supprimé à l'aide de MOVE TO, tous les index non cluster sur la table de base sont recréés, mais ils restent dans leur schéma de partition ou groupe de fichiers d'origine.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. Si la table de base est déplacée vers un schéma de partition ou groupe de fichiers différent, les index non cluster ne sont pas déplacés pour coïncider avec le nouvel emplacement de la table de base (segment de mémoire).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). Par conséquent, même si les index non cluster étaient précédemment alignés avec l'index cluster, ils peuvent ne plus être alignés avec le segment de mémoire.Therefore, even if the nonclustered indexes were previously aligned with the clustered index, they might no longer be aligned with the heap. Pour plus d’informations sur les index partitionnés, consultez Index et tables partitionnés.For more information about partitioned index alignment, see Partitioned Tables and Indexes.

partition_scheme_name ( column_name )partition_scheme_name ( column_name )
S’applique à: SQL Server 2008SQL Server 2008 jusqu’à SQL Server 2017SQL Server 2017, Base de données SQLSQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, Base de données SQLSQL Database.

Spécifie un schéma de partition comme emplacement de la table résultante.Specifies a partition scheme as the location for the resulting table. Le schéma de partition doit déjà avoir été créé en exécutant soit CREATE PARTITION SCHEME, soit ALTER PARTITION SCHEME.The partition scheme must have already been created by executing either CREATE PARTITION SCHEME or ALTER PARTITION SCHEME. Si aucun emplacement n'est spécifié et que la table est partitionnée, la table est incluse dans le même schéma de partition que l'index cluster existant.If no location is specified and the table is partitioned, the table is included in the same partition scheme as the existing clustered index.

Le nom de la colonne dans le schéma n'est pas limité aux colonnes dans la définition d'index.The column name in the scheme is not restricted to the columns in the index definition. Toute colonne dans la table de base peut être spécifiée.Any column in the base table can be specified.

filegroup_namefilegroup_name
S'applique à: SQL Server 2008SQL Server 2008 jusqu'à SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Spécifie un groupe de fichiers comme emplacement de la table résultante.Specifies a filegroup as the location for the resulting table. Si aucun emplacement n'est spécifié et que la table n'est pas partitionnée, la table résultante est incluse dans le même groupe de fichiers que l'index cluster.If no location is specified and the table is not partitioned, the resulting table is included in the same filegroup as the clustered index. Le groupe de fichiers doit déjà exister.The filegroup must already exist.

"default""default"
Spécifie l'emplacement par défaut de la table résultante.Specifies the default location for the resulting table.

Note

L'élément « default » n'est pas un mot clé dans ce contexte.In this context, default is not a keyword. Il s’agit d’un identificateur du groupe de fichiers par défaut qui doit être délimité, comme dans MOVE TO "default" or MOVE TO [default].It is an identifier for the default filegroup and must be delimited, as in MOVE TO "default" or MOVE TO [default]. Si "default" est spécifié, l’option QUOTED_IDENTIFIER doit être ON pour la session active.If "default" is specified, the QUOTED_IDENTIFIER option must be set ON for the current session. Il s'agit du paramètre par défaut.This is the default setting. Pour plus d’informations, consultez 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" }
S'applique à: SQL Server 2008SQL Server 2008 jusqu'à SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Spécifie un emplacement pour déplacer la table FILESTREAM qui se trouve actuellement au niveau feuille de l'index cluster.Specifies a location to move the FILESTREAM table that currently is in the leaf level of the clustered index. Les données sont déplacées vers le nouvel emplacement sous la forme d'un segment de mémoire.The data is moved to the new location in the form of a heap. Vous pouvez spécifier un schéma de partition ou un groupe de fichiers déjà existants comme nouvel emplacement.You can specify either a partition scheme or filegroup as the new location, but the partition scheme or filegroup must already exist. FILESTREAM ON n'est pas valide pour les vues indexées ou les index non cluster.FILESTREAM ON is not valid for indexed views or nonclustered indexes. Si aucun schéma de partition n'est spécifié, les données sont placées dans le même schéma de partition que celui qui a été défini pour l'index cluster.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
Spécifie un schéma de partition pour les données FILESTREAM.Specifies a partition scheme for the FILESTREAM data. Le schéma de partition doit déjà avoir été créé en exécutant soit CREATE PARTITION SCHEME, soit ALTER PARTITION SCHEME.The partition scheme must have already been created by executing either CREATE PARTITION SCHEME or ALTER PARTITION SCHEME. Si aucun emplacement n'est spécifié et que la table est partitionnée, la table est incluse dans le même schéma de partition que l'index cluster existant.If no location is specified and the table is partitioned, the table is included in the same partition scheme as the existing clustered index.

Si vous spécifiez un schéma de partition pour MOVE TO, vous devez utiliser le même schéma de partition pour 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
Spécifie un groupe de fichiers FILESTREAM pour les données FILESTREAM.Specifies a FILESTREAM filegroup for FILESTREAM data. Si aucun emplacement n'est défini et que la table n'est pas partitionnée, les données sont incluses dans le groupe de fichiers FILESTREAM par défaut.If no location is specified and the table is not partitioned, the data is included in the default FILESTREAM filegroup.

"default""default"
Spécifie l'emplacement par défaut des données FILESTREAM.Specifies the default location for the FILESTREAM data.

Note

L'élément « default » n'est pas un mot clé dans ce contexte.In this context, default is not a keyword. Il s’agit d’un identificateur du groupe de fichiers par défaut qui doit être délimité, comme dans MOVE TO "default" or MOVE TO [default].It is an identifier for the default filegroup and must be delimited, as in MOVE TO "default" or MOVE TO [default]. Si "default" est spécifié, l'option QUOTED_IDENTIFIER doit être activée (ON) pour la session active.If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. Il s'agit du paramètre par défaut.This is the default setting. Pour plus d’informations, consultez SET QUOTED_IDENTIFIER (Transact-SQL).For more information, see SET QUOTED_IDENTIFIER (Transact-SQL).

Notes Remarks

Lorsqu'un index non cluster est supprimé, la définition d'index est supprimée des métadonnées et les pages de données d'index (l'arborescence binaire ou arbre B) sont supprimées des fichiers de base de données.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. Lorsqu'un index cluster est supprimé, la définition d'index est supprimée des métadonnées et les lignes de données qui étaient stockées au niveau feuille de l'index cluster sont stockées dans la table non triée résultante, un segment de mémoire.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. Tout l'espace précédemment occupé par l'index est récupéré.All the space previously occupied by the index is regained. Cet espace peut ensuite être réaffecté à n'importe quel objet de la base de données.This space can then be used for any database object.

Un index ne peut pas être supprimé si le groupe de fichiers dans lequel il se trouve est hors connexion ou défini comme étant en lecture seule.An index cannot be dropped if the filegroup in which it is located is offline or set to read-only.

Lorsque l'index cluster d'une vue indexée est supprimé, tous les index non cluster et les statistiques créées automatiquement sur la même vue sont automatiquement supprimés.When the clustered index of an indexed view is dropped, all nonclustered indexes and auto-created statistics on the same view are automatically dropped. Les statistiques créées manuellement ne sont pas supprimées.Manually created statistics are not dropped.

La syntaxe table_or_view_name.index_name est conservée à des fins de compatibilité descendante.The syntaxtable_or_view_name.index_name is maintained for backward compatibility. Un index XML ou index spatial ne peut pas être supprimé à l'aide de la syntaxe à compatibilité descendante.An XML index or spatial index cannot be dropped by using the backward compatible syntax.

Lors de la suppression d'index contenant au moins 128 étendues, le Moteur de base de donnéesDatabase Engine diffère les désallocations de pages ainsi que les verrous qui y sont associés jusqu'à ce que la transaction soit validée.When indexes with 128 extents or more are dropped, the Moteur de base de donnéesDatabase Engine defers the actual page deallocations, and their associated locks, until after the transaction commits.

Des index peuvent parfois être supprimés et recréés pour réorganiser ou reconstruire l'index, par exemple pour appliquer un nouveau taux de remplissage ou pour réorganiser les données après un chargement en masse.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. Pour ce faire, l’utilisation de ALTER INDEX est plus efficace, en particulier pour les index clusters.To do this, using ALTER INDEXis more efficient, especially for clustered indexes. ALTER INDEX REBUILD possède des optimisations permettant d'éviter la surcharge liée à la reconstruction des index non cluster.ALTER INDEX REBUILD has optimizations to prevent the overhead of rebuilding the nonclustered indexes.

Utilisations d'options avec DROP INDEXUsing Options with DROP INDEX

Vous pouvez définir les options d'index suivantes lorsque vous supprimez un index cluster : MAXDOP, ONLINE et MOVE TO.You can set the following index options when you drop a clustered index: MAXDOP, ONLINE, and MOVE TO.

Utilisez MOVE TO pour supprimer l'index cluster et déplacer la table résultante vers un autre groupe de fichiers ou schéma de partition dans une transaction unique.Use MOVE TO to drop the clustered index and move the resulting table to another filegroup or partition scheme in a single transaction.

Lorsque vous spécifiez ONLINE = ON, les requêtes et modifications portant sur les données sous-jacentes et index non cluster associés ne sont pas bloqués par la transaction 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. Vous pouvez modifier un seul index cluster en ligne à la fois.Only one clustered index can be dropped online at a time. Pour obtenir une description complète de l’option ONLINE, consultez CREATE INDEX (Transact-SQL).For a complete description of the ONLINE option, see CREATE INDEX (Transact-SQL).

Vous ne pouvez pas supprimer un index cluster en ligne s’il est désactivé sur une vue ou contient les colonnes text, ntext, image, varchar(max), nvarchar(max), varbinary(max) ou xml sur les lignes de données de niveau feuille.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.

L'utilisation des options ONLINE = ON et MOVE TO nécessite une espace disque temporaire supplémentaire.Using the ONLINE = ON and MOVE TO options requires additional temporary disk space.

Après la suppression d’un index, le segment de mémoire résultant apparaît dans la vue de catalogue sys.indexes avec la valeur NULL dans la colonne name.After an index is dropped, the resulting heap appears in the sys.indexes catalog view with NULL in the name column. Pour afficher le nom de la table, joignez sys.indexes à sys.tables sur object_id.To view the table name, join sys.indexes with sys.tables on object_id. Pour un exemple de requête, reportez-vous à l'exemple D.For an example query, see example D.

Sur les ordinateurs multiprocesseurs qui exécutent SQL Server 2005 Enterprise EditionSQL Server 2005 Enterprise Edition ou version ultérieure, DROP INDEX peut, à l'instar d'autres requêtes, utiliser davantage de processeurs pour réaliser les opérations d'analyse et de tri associées à la suppression de l'index cluster.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. Vous pouvez configurer manuellement le nombre de processeurs utilisés pour exécuter l'instruction DROP INDEX en spécifiant l'option d'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. Pour plus d’informations, consultez Configurer des opérations d’index parallèles.For more information, see Configure Parallel Index Operations.

Lorsqu'un index cluster est supprimé, les partitions des segments de mémoire correspondants conservent leur paramètre de compression des données, à moins que le schéma de partitionnement soit modifié.When a clustered index is dropped, the corresponding heap partitions retain their data compression setting unless the partitioning scheme is modified. Si le schéma de partitionnement est modifié, toutes les partitions sont reconstruites dans un état non compressé (DATA_COMPRESSION = NONE).If the partitioning scheme is changed, all partitions are rebuilt to an uncompressed state (DATA_COMPRESSION = NONE). Pour supprimer un index cluster et modifier le schéma de partitionnement, vous devez effectuer les deux opérations suivantes :To drop a clustered index and change the partitioning scheme requires the following two steps:

  1. supprimer l'index cluster ;Drop the clustered index.

  2. modifier la table à l'aide d'une option ALTER TABLE ... REBUILD ... spécifiant l'option de compression.Modify the table by using an ALTER TABLE ... REBUILD ... option specifying the compression option.

Lorsqu'un index cluster est supprimé HORS CONNEXION, seuls les niveaux supérieurs des index clusters sont supprimés ; cette opération est donc très rapide.When a clustered index is dropped OFFLINE, only the upper levels of clustered indexes are removed; therefore, the operation is quite fast. Quand un index cluster est supprimé EN LIGNE, SQL ServerSQL Server reconstruit le segment de mémoire deux fois, une fois pour l’étape 1 et une fois pour l’étape 2.When a clustered index is dropped ONLINE, SQL ServerSQL Server rebuilds the heap two times, once for step 1 and once for step 2. Pour plus d’informations sur la compression de données, consultez Compression des données.For more information about data compression, see Data Compression.

Index XMLXML Indexes

Les options ne peuvent pas être spécifiées quand vous supprimez un index XML.Options cannot be specified when you drop anXML index. En outre, vous ne pouvez pas utiliser la syntaxe table_or_view_name.index_name.Also, you cannot use the table_or_view_name.index_name syntax. Lorsqu'un index XML primaire est supprimé, tous les index XML secondaires associés sont également supprimés.When a primary XML index is dropped, all associated secondary XML indexes are automatically dropped. Pour plus d’informations, consultez Index XML (SQL Server).For more information, see XML Indexes (SQL Server).

Index spatiauxSpatial Indexes

Les index spatiaux sont pris en charge uniquement dans les tables.Spatial indexes are supported only on tables. Quand vous supprimez un index spatial, vous ne pouvez pas spécifier d’options ni utiliser .index_name.When you drop a spatial index, you cannot specify any options or use .index_name. La syntaxe correcte est la suivante :The correct syntax is as follows:

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

Pour plus d’informations sur les index spatiaux, consultez Vue d’ensemble des index spatiaux.For more information about spatial indexes, see Spatial Indexes Overview.

AutorisationsPermissions

L'exécution de DROP INDEX nécessite au moins une autorisation ALTER sur la table ou la vue.To execute DROP INDEX, at a minimum, ALTER permission on the table or view is required. L’autorisation est accordée par défaut au rôle serveur fixe sysadmin et aux rôles de base de données fixes db_ddladmin et db_owner .This permission is granted by default to the sysadmin fixed server role and the db_ddladmin and db_owner fixed database roles.

ExemplesExamples

A.A. Suppression d'un indexDropping an index

L’exemple suivant supprime l’index IX_ProductVendor_VendorID sur la table ProductVendor de la base de données 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.B. Suppression de plusieurs indexDropping multiple indexes

L'exemple suivant supprime deux index en une seule transaction dans la base de données 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.C. Suppression d'un index cluster en ligne et configuration de l'option MAXDOPDropping a clustered index online and setting the MAXDOP option

L'exemple suivant supprime un index cluster en affectant à l'option ONLINE la valeur ON et à MAXDOP la valeur 8.The following example deletes a clustered index with the ONLINE option set to ON and MAXDOP set to 8. L'option MOVE TO n'étant pas spécifiée, la table résultante est stockée dans le même groupe de fichiers que l'index.Because the MOVE TO option was not specified, the resulting table is stored in the same filegroup as the index. Cet exemple utilise la base de données AdventureWorks2012AdventureWorks2012.This examples uses the AdventureWorks2012AdventureWorks2012 database

S’applique à: SQL Server 2008SQL Server 2008 jusqu’à SQL Server 2017SQL Server 2017, Base de données SQLSQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, Base de données SQLSQL Database.

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

D.D. Suppression d'un index cluster en ligne et déplacement de la table vers un nouveau groupe de fichiersDropping a clustered index online and moving the table to a new filegroup

L'exemple suivant supprime un index cluster en ligne et déplace la table résultante (segment de mémoire) vers le groupe de fichiers NewGroup en utilisant la clause 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. Les vues de catalogue sys.indexes, sys.tableset sys.filegroups sont interrogés pour vérifier le placement de l'index et de la table dans les groupes de fichiers avant et après l'opération de déplacement.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. (Depuis SQL Server 2016 (13.x)SQL Server 2016 (13.x), vous pouvez utiliser la syntaxe 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.)

S'applique à: SQL Server 2008SQL Server 2008 jusqu'à 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.E. Suppression d'une contrainte PRIMARY KEY en ligneDropping a PRIMARY KEY constraint online

Les index créés suite à la création de contraintes PRIMARY KEY ou UNIQUE ne peuvent être supprimés qu'à l'aide de DROP INDEX.Indexes that are created as the result of creating PRIMARY KEY or UNIQUE constraints cannot be dropped by using DROP INDEX. Ils sont supprimés à l'aide de l'instruction ALTER TABLE DROP CONSTRAINT.They are dropped using the ALTER TABLE DROP CONSTRAINT statement. Pour plus d’informations, consultez ALTER TABLE.For more information, see ALTER TABLE.

L'exemple suivant supprime un index cluster avec une contrainte PRIMARY KEY en supprimant la contrainte.The following example deletes a clustered index with a PRIMARY KEY constraint by dropping the constraint. La table ProductCostHistory ne comporte aucune contrainte FOREIGN KEY.The ProductCostHistory table has no FOREIGN KEY constraints. Si cela avait été le cas, ces contraintes auraient d'abord dû être supprimées.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.F. Suppression d'un index XMLDropping an XML index

L'exemple suivant supprime un index XML dans la table ProductModel de la base de données 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.G. Suppression d'un index cluster sur une table FILESTREAMDropping a clustered index on a FILESTREAM table

L'exemple suivant supprime un index cluster en ligne et déplace la table résultante (segment de mémoire) et les données FILESTREAM vers le schéma de partitionnement MyPartitionScheme en utilisant les clauses MOVE TO et 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.

S'applique à: SQL Server 2008SQL Server 2008 jusqu'à 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  

Voir aussiSee 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)