- 11/02/2019
- 4 minutes de lecture
-
- M
- M
- C
- M
- r
-
+9
S’applique à: SQL Server (toutes les versions prises en charge) Azure SQL Database
Un index est une structure sur disque associée à une table ou une vue qui accélère la récupération des lignes de la table ou de la vue. Un index 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 (arbre B) qui permet à SQL Server de trouver la ou les lignes associées aux valeurs de clé rapidement et efficacement.
Une table ou une vue peut contenir les types d’index suivants:
-
Clustered
- Les index groupés trient et stockent les lignes de données dans la table ou les vues en fonction de leurs valeurs de clé. Voici les colonnes incluses dans la définition d’index. Il ne peut y avoir qu’un seul index clusterisé par table, car les lignes de données elles-mêmes ne peuvent être stockées que dans un seul ordre.
- Le seul moment où les lignes de données d’une table sont stockées dans l’ordre trié est lorsque la table contient un index clusterisé. Lorsqu’une table a un index clusterisé, la table est appelée table clusterisée. 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 un tas.
-
Non clusterisé
-
Les index non clusterisés ont une structure distincte des lignes de données. Un index non clusterisé contient les valeurs de clé d’index non clusterisées et chaque entrée de valeur clé a un pointeur vers la ligne de données qui contient la valeur clé.
-
Le pointeur d’une ligne d’index dans un l’index d’une ligne de données est appelé un 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. Pour un tas, un localisateur de ligne est un pointeur vers la ligne. Pour une table en cluster, le localisateur de ligne est la clé d’index cluster.
-
Vous pouvez ajouter des colonnes non-clés au niveau feuille de l’index non cluster pour contourner les limites de clé d’index existantes, et exécutez des requêtes entièrement couvertes et indexées. Pour plus d’informations, consultez Créer des index avec des colonnes incluses. Pour plus d’informations sur les limites de clé d’index, consultez les spécifications de capacité maximale pour SQL Server.
-
Les index clusterisés et non clusterisés 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 gérés pour une table ou une vue chaque fois que les données de la table sont modifiées.
Voir les index pour d’autres types d’index à usage spécial.
Index et contraintes
Les index sont automatiquement créés lorsque les contraintes PRIMARY KEY et UNIQUE sont définies sur les colonnes de la table. Par exemple, lorsque vous créez une table avec une contrainte UNIQUE, le moteur de base de données crée automatiquement un index non clusterisé. Si vous configurez une CLÉ PRIMAIRE, le moteur de base de données crée automatiquement un index clusterisé, sauf si un index clusterisé existe déjà. Lorsque vous essayez d’appliquer une contrainte PRIMARY KEY sur une table existante et qu’un index clusterisé existe déjà sur cette table, SQL Server applique la clé primaire à l’aide d’un index non clusterisé.
Pour plus d’informations, consultez Créer des clés primaires et Créez des contraintes uniques.
Comment les index sont utilisés par l’optimiseur de requêtes
Des index bien conçus peuvent réduire les opérations d’E / S disque et consommer moins de ressources système, améliorant ainsi les performances des requêtes. Les index peuvent être utiles pour une variété de requêtes contenant 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 peut analyser un ou plusieurs index s’ils existent.
Lors d’une analyse de table, l’optimiseur de requête lit toutes les lignes de la table et extrait les lignes qui correspondent les critères de la requête. Une analyse de table génère de nombreuses opérations d’E / S disque et peut être gourmande en ressources. Cependant, une analyse de table peut être la méthode la plus efficace si, par exemple, l’ensemble 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 le indexer les colonnes de clé, trouve l’emplacement de stockage des lignes nécessaires à la requête et extrait les lignes correspondantes de cet emplacement. En général, la recherche dans l’index est beaucoup plus rapide que la recherche dans la table car, contrairement à une table, un index contient souvent très peu de colonnes par ligne et les lignes sont triées.
L’optimiseur de requêtes sélectionne généralement la méthode la plus efficace lors de l’exécution des requêtes. Toutefois, si aucun index n’est disponible, l’optimiseur de requêtes doit utiliser une analyse de table. Votre tâche consiste à concevoir et à créer les index les mieux adaptés à votre environnement afin que l’optimiseur de requêtes dispose d’une sélection d’index efficaces parmi lesquels sélectionner. SQL Server fournit le conseiller de réglage du moteur de base de données pour vous aider dans l’analyse de votre environnement de base de données et dans la sélection des index appropriés.
Important
Pour plus d’informations sur les directives de conception d’index et internes, reportez-vous au Guide de conception d’index SQL Server.
- Guide de conception d’index SQL Server
- Créer des index en cluster
- Créer des index non clusterisés Index