Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Vous pouvez créer des index cluster sur des tables dans SQL Server 2014 à l’aide de SQL Server Management Studio ou de Transact-SQL. Avec quelques exceptions, chaque table doit avoir un index cluster. Outre l’amélioration des performances des requêtes, un index cluster peut être reconstruit ou réorganisé à la demande pour contrôler la fragmentation des tables. Un index clusterisé peut également être créé sur une vue. (Les index clusterisés sont définis dans la rubrique Index clusterisés et non clusterisés décrits.)
Dans cette rubrique
Avant de commencer :
Pour créer un index cluster sur une table, utilisez :
Avant de commencer
Implémentations classiques
Les index cluster sont implémentés de la manière suivante :
Contraintes clé primaire et unique
Lorsque vous créez une contrainte PRIMARY KEY, un index cluster unique sur la colonne ou les colonnes est créé automatiquement si un index cluster sur la table n’existe pas déjà et que vous ne spécifiez pas d’index non cluster unique. La colonne clé primaire ne peut pas autoriser les valeurs NULL.
Lorsque vous créez une contrainte UNIQUE, un index non cluster unique est créé pour appliquer une contrainte UNIQUE par défaut. Vous pouvez spécifier un index cluster unique si un index cluster sur la table n’existe pas déjà.
Un index créé dans le cadre de la contrainte reçoit automatiquement le même nom que le nom de la contrainte. Pour plus d’informations, consultez Contraintes de clé primaire et étrangère et contraintes uniques et contraintes de vérification.
Index indépendant d’une contrainte
Vous pouvez créer un index clusterisé sur une colonne autre que la colonne de clé primaire si une contrainte de clé primaire non-clusterisée a été spécifiée.
Limitations et restrictions
Lorsqu’une structure d’index cluster est créée, l’espace disque pour les anciennes structures (source) et nouvelle (cible) est nécessaire dans leurs fichiers et groupes de fichiers respectifs. L’ancienne structure n’est pas libérée tant que la transaction n’est pas terminée. Un espace disque temporaire supplémentaire pour le tri peut également être nécessaire. Pour plus d'informations, consultez Exigences en matière d’espace disque pour les opérations DDL d'index.
Si un index clusterisé est créé sur un tas avec plusieurs index non-clusterisés existants, tous les index non-clusterisés doivent ê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é sur une table qui a plusieurs index non cluster, les index non cluster sont tous reconstruits dans le cadre de l’opération DROP. Cela peut prendre beaucoup de temps sur les tables volumineuses.
La méthode recommandée pour générer des index sur des tables volumineuses consiste à commencer par l’index cluster, puis à générer des index non cluster. Envisagez de définir l’option ONLINE sur ON lorsque vous créez des index sur des tables existantes. Lorsqu’il est défini sur ON, les verrous de table à long terme ne sont pas conservés. Cela permet aux requêtes ou aux mises à jour de la table sous-jacente de continuer. Pour plus d'informations, consultez Perform Index Operations Online.
La clé d’index d’un index cluster ne peut pas contenir de
varcharcolonnes qui ont des données existantes dans l’unité d’allocation ROW_OVERFLOW_DATA. Si un index cluster est créé sur unevarcharcolonne et que les données existantes se trouvent dans l’unité d’allocation IN_ROW_DATA, les actions d’insertion ou de mise à jour suivantes sur la colonne qui pousseraient les données hors ligne échoueront. 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 l’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 .
Utilisation de SQL Server Management Studio
Pour créer un index cluster à l’aide de l’Explorateur d’objets
Dans l’Explorateur d’objets, développez la table sur laquelle vous souhaitez créer un index cluster.
Cliquez avec le bouton droit sur le dossier Index , pointez sur Nouvel index, puis sélectionnez Index cluster....
Dans la boîte de dialogue Nouvel index , dans la page Général , entrez le nom du nouvel index dans la zone Nom de l’index .
Sous Colonnes clés d’index, cliquez sur Ajouter....
Dans la boîte de dialogue Sélectionner des colonnesdans table_name, activez la case à cocher de la colonne de table à ajouter à l’index clusterisé.
Cliquez sur OK.
Dans la boîte de dialogue Nouvel index , cliquez sur OK.
Pour créer un index cluster à l’aide du Concepteur de tables
Dans l’Explorateur d’objets, développez la base de données sur laquelle vous souhaitez créer une table avec un index cluster.
Cliquez avec le bouton droit sur le dossier Tables , puis cliquez sur Nouvelle table....
Créez une nouvelle table comme vous le feriez normalement. Pour plus d’informations, consultez la section Création de tables (moteur de base de données).
Cliquez avec le bouton droit sur la nouvelle table créée ci-dessus, puis cliquez sur Création.
Dans le menu Concepteur de tables , cliquez sur Index/Clés.
Dans la boîte de dialogue Index/Clés , cliquez sur Ajouter.
Sélectionnez le nouvel index dans la zone de texte Clé primaire/Unique sélectionnée ou Index .
Dans la grille, sélectionnez Créer en tant que cluster, puis choisissez Oui dans la liste déroulante à droite de la propriété.
Cliquez sur Fermer.
Dans le menu Fichier , cliquez sur Enregistrertable_name.
Utilisation de Transact-SQL
Pour créer un index cluster
Dans l' Explorateur d'objets, connectez-vous à une instance du Moteur de base de données.
Dans la barre d'outils standard, cliquez sur Nouvelle requête.
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).