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.
Un index est une structure sur disque associée à une table ou une vue qui accélère l'extraction des lignes de la table ou de la vue. Il contient des clés créées à partir d'une ou plusieurs colonnes de la table ou de la vue. Ces clés sont stockées dans une structure (B-tree) qui permet à SQL Server de trouver rapidement et efficacement la ou les lignes associées aux valeurs de clé.
Une table ou une vue peut contenir les types d’index suivants :
Regroupé
Les index en cluster trient et stockent les lignes de données dans la table ou la vue en fonction de leurs valeurs de clé. Il s’agit des colonnes incluses dans la définition d’index. Il ne peut y avoir qu’un seul index cluster par table, car les lignes de données elles-mêmes peuvent être triées dans un seul ordre.
La seule fois que les lignes de données d’une table sont stockées dans l’ordre trié, c’est quand la table contient un index cluster. Lorsqu’une table a un index cluster, la table est appelée table en cluster. Si une table n’a pas d’index clusterisé, ses lignes de données sont stockées dans une structure non ordonnée appelée tas.
Non-clustered
Les index non cluster ont une structure distincte des lignes de données. Un index non clusterisé contient les valeurs des clés de l'index non clusterisé, et chaque entrée de clé possède un pointeur vers la ligne de données qui contient la valeur de clé.
Le pointeur d’une ligne d’index dans un index non cluster vers une ligne de données est appelé localisateur de lignes. La structure du localisateur de lignes varie selon que les pages de données sont stockées dans un tas ou dans une table en cluster. Dans un tas, un localisateur de lignes est un pointeur vers la ligne. Pour une table en cluster, le localisateur de lignes est la clé d’index cluster.
Vous pouvez ajouter des colonnes non clés au niveau feuille de l'index non clusterisé pour contourner les limites existantes des clés d'index, 900 octets et 16 colonnes clés, et exécuter des requêtes entièrement couvertes et indexées. Pour plus d’informations, consultez Créer des index avec colonnes incluses.
Tant les index cluster que les index non-cluster peuvent être uniques. Cela signifie qu’aucune ligne ne peut avoir la même valeur pour la clé d’index. Sinon, l’index n’est pas unique et plusieurs lignes peuvent partager la même valeur de clé. Pour plus d’informations, consultez Créer des index uniques.
Les index sont automatiquement conservés pour une table ou une vue chaque fois que les données de la table sont modifiées.
Consultez Les index pour obtenir des types supplémentaires d’index à usage spécial.
Index et contraintes
Les index sont créés automatiquement lorsque les contraintes PRIMARY KEY et UNIQUE sont définies sur les colonnes de table. Par exemple, lorsque vous créez une table et identifiez une colonne particulière comme clé primaire, le moteur de base de données crée automatiquement une contrainte PRIMARY KEY et un index sur cette colonne. Pour plus d’informations, consultez Créer des clés primaires et créer des contraintes uniques.
Utilisation des index par l’optimiseur de requête
Les index bien conçus peuvent réduire les opérations d’E/S de disque et consommer moins de ressources système, ce qui améliore les performances des requêtes. Les index peuvent être utiles pour diverses requêtes qui contiennent des instructions SELECT, UPDATE, DELETE ou MERGE. Considérez la requête SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250 dans la base de données AdventureWorks2012 . Lorsque cette requête est exécutée, l’optimiseur de requête évalue chaque méthode disponible pour récupérer les données et sélectionne la méthode la plus efficace. La méthode peut être une analyse de table ou analyser un ou plusieurs index s’ils existent.
Lorsque vous effectuez une analyse de table, l’optimiseur de requête lit toutes les lignes de la table et extrait les lignes qui répondent aux critères de la requête. Une analyse de table génère de nombreuses opérations d’E/S sur disque et peut être gourmande en ressources. Toutefois, une analyse de table peut être la méthode la plus efficace si, par exemple, le jeu de résultats de la requête est un pourcentage élevé de lignes de la table.
Lorsque l’optimiseur de requête utilise un index, il recherche les colonnes clés d’index, recherche l’emplacement de stockage des lignes nécessaires à la requête et extrait les lignes correspondantes à partir de cet emplacement. En règle générale, la recherche de l’index est beaucoup plus rapide que la recherche dans la table, car contrairement à une table, un index contient fréquemment très peu de colonnes par ligne et les lignes sont triées.
L’optimiseur de requête sélectionne généralement la méthode la plus efficace lors de l’exécution de requêtes. Toutefois, si aucun index n’est disponible, l’optimiseur de requête doit utiliser une analyse de table. Votre tâche consiste à concevoir et à créer des index qui conviennent le mieux à votre environnement afin que l’optimiseur de requête dispose d’une sélection d’index efficaces à partir desquels sélectionner. SQL Server fournit l’Assistant Paramétrage du moteur de base de données pour faciliter l’analyse de votre environnement de base de données et la sélection d’index appropriés.