Share via


Créer des index cluster

Vous pouvez créer des index cluster sur les tables dans SQL Server 2012 à l'aide de SQL Server Management Studio ou de Transact-SQL. À quelques exceptions près, chaque table doit posséder un index cluster. Outre le fait qu'il améliore les performances des requêtes, un index cluster peut être reconstruit ou réorganisé à la demande pour contrôler la fragmentation de la table. Un index cluster peut également être créé sur une vue. (Les index cluster sont définis dans la rubrique Description des index cluster et non-cluster.)

Dans cette rubrique

  • Avant de commencer :

    Implémentations types

    Limitations et restrictions

    Sécurité

  • Pour créer un index cluster sur une table à l'aide de :

    SQL Server Management Studio

    Transact-SQL

Avant de commencer

Implémentations types

Les index cluster sont implémentés des manières suivantes :

  • Contraintes PRIMARY KEY et UNIQUE

    Lorsque vous créez une contrainte PRIMARY KEY, un index cluster unique est automatiquement généré sur la ou les colonnes si aucun index cluster n'existe déjà sur la table et que vous ne spécifiez pas un index non-cluster unique. La colonne clé primaire ne peut pas contenir de valeurs NULL.

    Lorsque vous créez une contrainte UNIQUE, un index non-cluster unique est créé pour appliquer par défaut une contrainte UNIQUE. Vous pouvez spécifier un index cluster unique si aucun index cluster n'existe déjà sur la table.

    Un index créé dans le cadre de la contrainte reçoit automatiquement le nom de celle-ci. Pour plus d'informations, consultez Contraintes de clé primaire et de clé étrangère et Contraintes uniques et contraintes de validation.

  • Index indépendant d'une contrainte

    Vous pouvez créer un index cluster sur une autre colonne que la colonne clé primaire si une contrainte de clé primaire non-cluster a été spécifiée.

Limitations et restrictions

  • Lorsqu'une structure d'index cluster est créée, l'ancienne structure (source) et la nouvelle structure (cible) requièrent de l'espace disque dans leurs fichiers et groupes de fichiers respectifs. L'ancienne structure n'est désallouée qu'une fois l'ensemble de la transaction validé. Il est également possible qu'une opération de tri nécessite de l'espace disque temporaire supplémentaire. Pour plus d'informations, consultez Espace disque nécessaire pour les opérations DDL d'index.

  • Si un index cluster est créé sur un segment comprenant plusieurs index non-cluster, ces derniers doivent tous être reconstruits afin qu'ils contiennent la valeur de clé de clustering au lieu de l'identificateur de ligne (RID). De même, si un index cluster est supprimé d'une table comprenant plusieurs index non-cluster, ces derniers sont tous regénérés pendant l'opération de suppression (DROP). Cette opération peut prendre beaucoup de temps sur les tables volumineuses.

    Il est préférable de construire des index sur des tables volumineuses en commençant par l'index cluster, puis de poursuivre avec les index non-cluster. Pensez à attribuer la valeur ON à l'option ONLINE lorsque vous créez des index sur des tables existantes. Lorsque cette option a pour valeur ON, les verrous de table à long terme ne sont pas maintenus. Ce paramétrage permet de poursuivre les interrogations ou les mises à jour de la table sous-jacente. Pour plus d'informations, consultez Exécuter des opérations en ligne sur les index.

  • La clé d'un index cluster ne peut pas contenir de colonnes varchar qui possèdent des données dans l'unité d'allocation ROW_OVERFLOW_DATA. Si un index cluster est créé sur une colonne varchar et que les données existantes se trouvent dans l'unité d'allocation IN_ROW_DATA, les actions d'insertion ou de mise à jour réalisées ultérieurement sur la colonne et susceptibles d'envoyer les données hors ligne sont vouées à l'échec. Pour obtenir des informations sur les tables qui peuvent contenir des données de dépassement de ligne, utilisez la fonction de gestion dynamique sys.dm_db_index_physical_stats (Transact-SQL).

Sécurité

Autorisations

Nécessite une autorisation ALTER sur la table ou la vue. L'utilisateur doit être membre du rôle serveur fixe sysadmin ou des rôles de base de données fixes db_ddladmin et db_owner.

Icône de flèche utilisée avec le lien Retour en haut[Top]

Utilisation de SQL Server Management Studio

Pour créer un index cluster à l'aide de l'Explorateur d'objets

  1. Dans l'Explorateur d'objets, développez la table sur laquelle vous souhaitez créer un index cluster.

  2. Cliquez avec le bouton droit sur le dossier Index, pointez sur Nouvel index, puis sélectionnez Index cluster….

  3. Dans la boîte de dialogue Nouvel index, sur la page Général, entrez le nom du nouvel index dans la zone Nom de l'index.

  4. Sous Colonnes clés d'index, cliquez sur Ajouter….

  5. Dans la boîte de dialogue Sélectionnez les colonnes à partir de table_name, activez la case à cocher de la colonne de la table à ajouter à l'index.

  6. Cliquez sur OK.

  7. Dans la boîte de dialogue Nouvel index, cliquez sur OK.

Pour créer un index cluster à l'aide du Concepteur de tables

  1. Dans l'Explorateur d'objets, développez la base de données sur laquelle vous souhaitez créer une table avec un index cluster.

  2. Cliquez avec le bouton droit sur le dossier Tables et sélectionnez Nouvelle table....

  3. Créez une table comme vous le feriez normalement. Pour plus d'informations, consultez Créer des tables (moteur de base de données).

  4. Cliquez avec le bouton droit sur la nouvelle table créée ci-dessus, puis sélectionnez Création.

  5. Dans le menu Concepteur de tables, cliquez sur Index/Clés.

  6. Dans la boîte de dialogue Index/Clés, cliquez sur Ajouter.

  7. Sélectionnez le nouvel index dans la zone de texte Clé ou index Primary/Unique sélectionné.

  8. Dans la grille, sélectionnez Créer comme Clustered et choisissez Oui dans la liste déroulante à droite de la propriété.

  9. Cliquez sur Fermer.

  10. Dans le menu Fichier, cliquez sur Enregistrer table_name.

Icône de flèche utilisée avec le lien Retour en haut[Top]

Utilisation de Transact-SQL

Pour créer un index cluster

  1. Dans l'Explorateur d'objets, connectez-vous à une instance du Moteur de base de données.

  2. Dans la barre d'outils standard, cliquez sur Nouvelle requête.

  3. Copiez et collez l'exemple suivant dans la fenêtre de requête, puis cliquez sur Exécuter.

    USE AdventureWorks2012;
    GO
    -- Create a new table with three columns.
    CREATE TABLE dbo.TestTable
        (TestCol1 int NOT NULL,
         TestCol2 nchar(10) NULL,
         TestCol3 nvarchar(50) NULL);
    GO
    -- Create a clustered index called IX_TestTable_TestCol1
    -- on the dbo.TestTable table using the TestCol1 column.
    CREATE CLUSTERED INDEX IX_TestTable_TestCol1 
        ON dbo.TestTable (TestCol1); 
    GO
    

Pour plus d'informations, consultez CREATE INDEX (Transact-SQL).

Icône de flèche utilisée avec le lien Retour en haut[Top]

Voir aussi

Concepts

Créer des clés primaires

Créer des contraintes uniques