DROP INDEX (Transact-SQL)

ms176118.note(fr-fr,SQL.90).gifImportant :
La syntaxe définie dans <drop_backward_compatible_index> sera supprimée dans une version future de Microsoft SQL Server. Évitez d'utiliser cette syntaxe dans un nouveau travail de développement et prévoyez la modification des applications qui l'utilisent actuellement. Utilisez plutôt la syntaxe spécifiée sous <drop_relational_or_xml_index>. Les index XML ne peuvent pas être supprimés à l'aide d'une syntaxe à compatibilité descendante.

Supprime un ou plusieurs index relationnels ou XML de la base de données active. Dans SQL Server 2005, 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.

L'instruction DROP INDEX ne s'applique pas aux index créés en définissant les contraintes PRIMARY KEY ou UNIQUE. Pour supprimer la contrainte et l'index correspondant, utilisez ALTER TABLE avec la clause DROP CONSTRAINT.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

DROP INDEX
{ <drop_relational_or_xml_index> [ ,...n ] 
| <drop_backward_compatible_index> [ ,...n ]
}

<drop_relational_or_xml_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" 
            }
}

Arguments

  • index_name
    Nom de l'index à supprimer.
  • database_name
    Indique le nom de la base de données.
  • schema_name
    Nom du schéma auquel appartient la table ou la vue.
  • table_or_view_name
    Nom de la table ou de la vue associée à l'index. Pour afficher un rapport sur les index d'un objet, utilisez l'affichage catalogue sys.indexes.
  • <drop_clustered_index_option>
    Contrôle les options d'index cluster. Ces options ne peuvent pas être utilisées avec d'autres types d'index.
  • MAXDOP = max_degree_of_parallelism
    Modifie l'option de configuration max degree of parallelism pendant la durée de l'opération d'indexation. Pour plus d'informations, consultez Option max degree of parallelism. Utilisez MAXDOP pour limiter le nombre de processeurs utilisés dans une exécution de plans parallèles. Le nombre maximal de processeurs est de 64.

    Valeurs possibles de max_degree_of_parallelism :

    • 1
      Supprime la génération de plans parallèles.
    • >1
      Limite le nombre de processeurs utilisés dans une opération de plans parallèles au nombre indiqué.
    • 0 (valeur par défaut)
      Utilise le nombre réel de processeurs ou moins de processeurs en fonction de la charge de travail actuelle du système.

    Pour plus d'informations, consultez Configuration d'opérations d'index parallèles.

    ms176118.note(fr-fr,SQL.90).gifRemarque :
    Les opérations d'index parallèles ne sont disponibles que dans SQL Server 2005 Enterprise Edition.
  • ONLINE = ON | OFF
    Spécifie si les tables sous-jacentes et index associés sont disponibles pour la modification des requêtes et des données pendant l'opération d'index. La valeur par défaut est OFF.

    • ON
      Les verrous de table à long terme ne sont pas maintenus. Cela permet aux requêtes ou mises à jour de la table sous-jacente de continuer.
    • OFF
      Les verrous de table sont appliqués et la table est indisponible pendant la durée de l'opération d'index.

    L'option ONLINE ne peut être spécifiée que si vous supprimez des index clusters. Pour plus d'informations, consultez la rubrique Notes, ci-après.

    ms176118.note(fr-fr,SQL.90).gifRemarque :
    Les opérations d'index en ligne ne sont disponibles que dans SQL Server 2005 Enterprise Edition.
  • MOVE TO
    Spécifie un emplacement pour déplacer les lignes de données qui se trouvent actuellement au niveau feuille de l'index cluster. Les données sont déplacées vers le nouvel emplacement sous la forme d'un segment. Vous pouvez spécifier un schéma de partition ou un groupe de fichiers déjà existants comme nouvel emplacement. MOVE TO n'est pas valide pour les vues non indexées ou les index non-cluster. Si un schéma de partition ou un groupe de fichiers n'est pas 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.

    Si un index cluster est supprimé en utilisant 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. 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). Cependant, 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. Pour plus d'informations sur l'alignement d'index partitionnés, consultez Consignes spéciales pour les index partitionnés.

  • partition_scheme_name ( column_name )
    Spécifie un schéma de partition comme emplacement de la table résultante. Le schéma de partition doit déjà avoir été créé en exécutant soit CREATE PARTITION SCHEME, soit 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.

    Le nom de la colonne dans le schéma n'est pas limité aux colonnes dans la définition d'index. Toute colonne dans la table de base peut être spécifiée.

  • filegroup_name
    Spécifie un groupe de fichiers comme emplacement de la table résultante. 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. Le groupe de fichiers doit déjà exister.
  • "default"
    Spécifie l'emplacement par défaut de la table résultante.

    ms176118.note(fr-fr,SQL.90).gifRemarque :
    L'élément default n'est pas un mot clé dans ce contexte. C'est un identifiant du groupe de fichiers par défaut et il doit être délimité, comme dans MOVE TO "default" ou MOVE TO [default]. Si "default" est spécifié, l'option QUOTED_IDENTIFIER doit être ON pour la session actuelle. Il s'agit du paramètre par défaut. Pour plus d'informations, consultez SET QUOTED_IDENTIFIER (Transact-SQL).

Notes

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. 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. Tout l'espace précédemment occupé par l'index est récupéré. Cet espace peut ensuite être réaffecté à n'importe quel objet de la base de données.

Un index ne peut pas être supprimé si le groupe de fichiers dans lequel il se trouve est hors ligne ou défini comme étant en lecture seule.

Lorsque l'index cluster d'une vue indexée est supprimé, tous les index non-cluster et statistiques auto-créées sur la même vue sont automatiquement supprimés. Les statistiques créées manuellement ne sont pas supprimées.

La syntaxe index_name ON { table_or_view_name } est nouvelle dans SQL Server 2005. La syntaxetable_or_view_name**.**index_name est conservée pour la compatibilité descendante. La combinaison des deux options dans une seule transaction provoque l'échec de l'instruction. Un index XML ne peut pas être supprimé à l'aide de la syntaxe à compatibilité descendante.

Lorsque les index avec 128 extensions ou plus sont supprimés, le moteur de base de données SQL Server 2005 diffère les désallocations de pages réelles et leurs verrous associés, jusqu'à ce que la transaction soit validée. Pour plus d'informations, consultez Suppression et reconstruction d'objets volumineux.

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 bloc. Pour ce faire, l'utilisation de ALTER INDEX est plus efficace, spécialement pour les index clusters. ALTER INDEX REBUILD possède des optimisations pour éviter le délai de traitement de la reconstruction des index non-cluster.

Utilisations d'options avec DROP INDEX

Dans SQL Server 2005, vous pouvez définir les options d'index suivantes lorsque vous supprimez un index cluster : MAXDOP, ONLINE et 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.

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. Vous pouvez modifier un seul index cluster en ligne à la fois. Pour une description complète de l'option ONLINE, consultez CREATE INDEX (Transact-SQL).

Vous ne pouvez pas supprimer un index cluster en ligne si l'index est désactivé sur une vue ou contient les colonnes text, ntext, image, varchar(max), nvarchar(max), varbinary(max) ou xml dans les lignes de données de niveau feuille.

L'utilisation des options ONLINE = ON et MOVE TO nécessite une espace disque temporaire supplémentaire. Pour plus d'informations, consultez Détermination de l'espace disque requis par les index.

Après la suppression d'un index, le segment résultant apparaît dans l'affichage catalogue sys.indexes avec la valeur NULL dans la colonne name. Pour afficher le nom de la table, joignez sys.indexes à sys.tables sur object_id. Pour un exemple de requête, reportez-vous à l'exemple D.

Sur les ordinateurs multiprocesseur qui exécutent SQL Server 2005 Enterprise Edition, DROP INDEX peut utiliser plus de processeurs pour exécuter l'analyse et trier les opérations associées à la suppression de l'index cluster, comme le font les autres requêtes. 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. Pour plus d'informations, consultez Configuration d'opérations d'index parallèles.

Index XML

Les options ne peuvent pas être spécifiées lorsque vous supprimez un index XML. Lorsqu'un index XML primaire est supprimé, tous les index XML secondaires associés sont également supprimés. Pour plus d'informations, consultez Index portant sur des colonnes de type xml.

Autorisations

L'exécution de DROP INDEX nécessite au moins une autorisation ALTER sur la table ou la vue. 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.

Exemples

A. Suppression d'un index

L'exemple suivant supprime l'index IX_ProductVendor_VendorID sur la table ProductVendor.

USE AdventureWorks;
GO
DROP INDEX IX_ProductVendor_VendorID 
    ON Purchasing.ProductVendor;
GO

B. Suppression de plusieurs index

L'exemple suivant supprime deux index en une seule transaction.

USE AdventureWorks;
GO
DROP INDEX
    IX_PurchaseOrderHeader_EmployeeID ON Purchasing.PurchaseOrderHeader,
    IX_VendorAddress_AddressID ON Purchasing.VendorAddress;
GO

C. Suppression d'un index cluster en ligne et configuration de l'option MAXDOP

L'exemple suivant supprime un index cluster en donnant à l'option ONLINE la valeur ON et à MAXDOP la valeur 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.

ms176118.note(fr-fr,SQL.90).gifRemarque :
Cet exemple ne peut être exécuté que dans SQL Server 2005 Enterprise Edition.
USE AdventureWorks;
GO
DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate 
    ON Production.BillOfMaterials WITH (ONLINE = ON, MAXDOP = 2);
GO

C. Suppression d'un index cluster en ligne et déplacement de la table vers un nouveau groupe de fichiers

L'exemple suivant supprime un index cluster en ligne et déplace la table résultante (segment) vers le groupe de fichiers NewGroup en utilisant la clause MOVE TO. Les affichages catalogue sys.indexes, sys.tables et 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.

USE AdventureWorks;
GO
--Create a clustered index on the PRIMARY filegroup if it does not exist.
IF NOT EXISTS (SELECT name FROM sys.indexes WHERE name = 
            N'AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate')
    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.
-- Get the SQL Server data path
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);

-- execute the ALTER DATABASE statement 
IF NOT EXISTS (SELECT name FROM sys.filegroups
                WHERE name = N'NewGroup')
    BEGIN
    ALTER DATABASE AdventureWorks
        ADD FILEGROUP NewGroup;
    EXECUTE ('ALTER DATABASE AdventureWorks
        ADD FILE (NAME = File1,
            FILENAME = '''+ @data_path + '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. Suppression d'une contrainte PRIMARY KEY en ligne

Les index créés comme résultat de la création de contraintes PRIMARY KEY ou UNIQUE ne peuvent être supprimés qu'à l'aide de DROP INDEX. Ils sont supprimés à l'aide de l'instruction ALTER TABLE DROP CONSTRAINT. Pour plus d'informations, consultez l'instruction ALTER TABLE.

L'exemple suivant supprime un index cluster avec une contrainte PRIMARY KEY en supprimant la contrainte. La table ProductCostHistory ne comporte aucune contrainte FOREIGN KEY. Si cela avait été le cas, ces contraintes auraient d'abord dû être supprimées.

USE AdventureWorks;
GO
-- Set ONLINE = OFF to execute this example on editions other than Enterprise Edition.
ALTER TABLE Production.ProductCostHistory
    DROP CONSTRAINT PK_ProductCostHistory_ProductID_StartDate
        WITH (ONLINE = ON);
GO

F. Suppression d'un index XML

L'exemple suivant supprime un index XML sur la table ProductModel.

USE AdventureWorks;
GO
DROP INDEX PXML_ProductModel_CatalogDescription 
    ON Production.ProductModel;
GO

Voir aussi

Référence

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

Autres ressources

Détermination de l'espace disque requis par les index
Suppression d'index

Aide et Informations

Assistance sur SQL Server 2005