Présentation de l'index SQL Server
Lorsque l'on parle de réglage des performances de SQL Server et d'amélioration des requêtes, la première chose à considérer est l'index SQL Server. Il sert à accélérer la lecture des données des tables sous-jacentes en fournissant un accès rapide aux lignes demandées. Ainsi, il n'aura pas besoin d'analyser tous les enregistrements de la table.
L'index SQL Server fournit ces capacités de recherche rapide grâce à la structure B-Tree de l'index. Cette structure permet de parcourir rapidement les lignes du tableau en fonction de la clé d'index et de récupérer immédiatement les enregistrements demandés. Il n'aura pas besoin de lire tout le tableau.
Types d'index SQL Server
Parmi les principaux types, nous prêtons attention aux index clusterisés et non clusterisés.
L'index clusterisé trie les données réelles dans les pages de données en fonction des valeurs de clé d'index cluster. Il stocke les données au niveau "feuille" de l'index, garantissant la possibilité de créer un seul index clusterisé sur chaque table. L'index clusterisé est créé automatiquement lorsqu'une contrainte de clé primaire apparaît sur la table de tas.
L'index non clusterisé contient la valeur de la clé d'index et un pointeur vers le reste des colonnes de ligne dans la table principale. Il s'agit du niveau "feuille" de l'index, avec la possibilité de créer jusqu'à 999 index non clusterisés sur chaque table.
Si votre table n'a pas d'index clusterisé créé dessus, la table s'appelle la "table de tas". Une telle table n'a aucun critère pour spécifier l'ordre des données à l'intérieur des pages et le tri et la liaison des pages.
Lorsqu'un index clusterisé est créé sur cette table, nous appelons la table triée une table clusterisée.
Il existe également d'autres types d'index fournis par SQL Server :
- L'index Unique applique l'unicité des valeurs de colonne ;
- L'index de couverture contient toutes les colonnes demandées par la requête ;
- L'index composite contient plusieurs colonnes dans la clé d'index ;
- Les autres types d'index particuliers sont les index XML, Spatial et Columnstore.
L'avantage de l'index SQL Server est qu'il améliore les performances des requêtes. Cependant, cela fonctionne si seul l'index est correct. Si vous le concevez mal, cela affectera négativement les performances des requêtes et consommera les ressources SQL Server pour stocker et maintenir des index inutiles.
Choisir le meilleur index qui résout tous les problèmes n'est pas une tâche facile. L'ajout d'un nouvel index peut accélérer le processus de récupération des données, mais il ralentit les processus de modification des données. Toute modification apportée à la table sous-jacente est répercutée directement sur tous les index associés pour assurer la cohérence des données.
C'est pourquoi vous devez étudier et tester l'impact du nouvel index avant de le créer dans l'environnement de production. Il est également nécessaire de surveiller son impact et son utilisation après son déploiement dans l'environnement de production.
Facteurs à prendre en compte lors de la conception d'un nouvel index SQL Server
Le premier facteur est le type de charge de travail de la base de données . Supposons que nous traitions une charge de travail OLTP avec un grand nombre d'opérations d'écriture. Il nécessite le moins d'index possible. Un autre cas est une charge de travail OLAP avec de nombreuses opérations de lecture - elle exigera autant d'index que possible pour accélérer la récupération des données.
De plus, vous devez regarder la taille de la table . SQL Server Engine préfère analyser directement la table sous-jacente, au lieu de perdre du temps et des ressources à choisir le meilleur index pour la récupération des données à partir de cette petite table.
Une fois que vous avez décidé de créer un index sur cette table, vous devez identifier le type d'index pour répondre à votre requête . Là, vous spécifiez les colonnes ajoutées à la clé d'index. Les bases sont le type de données de la colonne et sa position dans les prédicats de requête et les conditions de jointure.
Ces facteurs doivent garantir les meilleures performances de récupération des données, dans le bon ordre, et maintenir l'index aussi court et simple que possible.
Un autre facteur à prendre en compte lors de la conception d'un nouvel index est le stockage d'index . Il est recommandé de créer des index non clusterisés sur un groupe de fichiers et un lecteur de disque distincts. De cette façon, vous isolez les opérations d'E/S effectuées dans les pages de données d'index des fichiers de données de la base de données.
Envisagez de définir l'index FILLFACTOR , qui détermine le pourcentage d'espace sur chaque page de niveau feuille remplie de données (la valeur diffère de la valeur par défaut de 0 ou 100 %). L'objectif est de laisser de l'espace dans chaque page de données d'index pour les enregistrements nouvellement insérés ou mis à jour. Cela minimise également l'occurrence de fractionnement de pages qui pourrait entraîner le problème de fragmentation de l'index.
Gestion des index
Le rôle de l'administrateur de base de données dans l'amélioration des performances des requêtes avec les index SQL Server ne se limite pas à la création de l'index. Vous devez surveiller de manière proactive l'utilisation de l'index pour identifier sa qualité. De plus, nous devons maintenir l'index régulièrement pour résoudre les problèmes de fragmentation.
SQL Server Management Studio, avec sa fonctionnalité de création de rapports robuste, fournit les données statistiques les plus utiles aux administrateurs de base de données. L'un de ces rapports intégrés est Statistiques d'utilisation de l'index. :
Le rapport Statistiques d'utilisation de l'index décrit comment les index de base de données sont utilisés sous la forme :
- Cherche :le nombre de fois que l'index est utilisé par SQL Engine pour trouver une ligne spécifique.
- Analyses :le nombre de fois que les pages d'index sont parcourues par le moteur SQL.
- Recherches :le nombre de fois qu'un index non clusterisé a été utilisé comme index clusterisé pour récupérer le reste des colonnes non répertoriées dans l'index non clusterisé.
- Mises à jour :le nombre de fois que les données de l'index sont modifiées.
Notez que l'objectif principal de la création d'index est d'effectuer une opération de recherche d'index, comme indiqué ci-dessous :
Le rapport précédent aide considérablement à spécifier si le serveur SQL tire parti de ces index pour accélérer ou non le processus de récupération des données. S'il s'avère qu'un index particulier ne fonctionne pas comme il le devrait, supprimez-le et remplacez-le par un meilleur.
Le deuxième rapport fourni par le SSMS est l'Index Physical Statistics . Il renvoie les informations statistiques sur le pourcentage de fragmentation d'index pour chaque partition d'index, avec le nombre de pages sur chaque partition d'index.
Il recommande également comment résoudre les problèmes de fragmentation d'index en reconstruisant ou en réorganisant cet index, en fonction du pourcentage de fragmentation, comme indiqué ci-dessous :
Pour appliquer les recommandations fournies par le rapport, vous pouvez exécuter la commande de défragmentation d'index pour chaque index. Ou, vous pouvez créer un plan de maintenance à l'aide de SSMS pour maintenir l'index de la meilleure façon.
Gestionnaire d'index dbForge
dbForge Index Manager est un complément SSMS, servant à détecter et résoudre les problèmes de fragmentation des index SQL Server.
Il s'agit également d'un outil centralisé, offrant la possibilité de détecter le pourcentage de fragmentation d'index dans les bases de données. Vous pouvez résoudre ces problèmes en effectuant une reconstruction d'index. Une autre méthode consiste à réorganiser les opérations en fonction de la gravité de la fragmentation de cet index. Entre autres options, il y a la génération de scripts T-SQL pour l'exécution des commandes liées à l'index, l'exportation des résultats de l'analyse de l'index pour référence ultérieure et l'utilisation de l'interface de ligne de commande pour automatiser les tâches de maintenance de l'index.
dbForge Index Manager est disponible sur la page de téléchargement de Devart. Vous pouvez l'installer sur votre machine à l'aide d'un assistant d'installation simple. Une fois l'installation réussie, ce complément est prêt à être utilisé.
Pour l'utiliser dans le SSMS, cliquez avec le bouton droit sur la base de données et choisissez Gérer la fragmentation de l'index dans la liste du gestionnaire d'index :
Depuis la fenêtre Index Manager, vous pouvez filtrer le nom de la base de données qui vous intéresse.
Cliquez sur Réanalyser pour effectuer la vérification de la fragmentation d'index pour la base de données sélectionnée. Il affiche automatiquement les statistiques de fragmentation d'index pour tous les index créés sous la base de données sélectionnée au cours de ce processus.
L'outil Index Manager recommande également les actions pour résoudre les problèmes de fragmentation d'index, en fonction du pourcentage de fragmentation :
La vérification des index sous la section Actions requises dans la fenêtre précédente permet d'exporter la liste des actions sous forme de rapport CSV. Il vous permet d'effectuer le correctif suggéré en réorganisant ou en reconstruisant les index problématiques directement à partir de cette page ou en générant un script pour le faire plus tard :
Le correctif de fragmentation d'index dans notre scénario sera le suivant :
Si vous exécutez le script précédent ou cliquez sur Corriger option, puis Réanalyser le résultat, vous voyez que le problème de fragmentation est résolu directement :
De cette façon, nous profitons du gestionnaire d'index dbForge pour analyser et identifier les problèmes de fragmentation d'index, puis les signaler ou les résoudre directement depuis le même endroit.
Outil utile
dbForge Index Manager apporte la réparation intelligente des index et la fragmentation des index directement dans SSMS. L'outil vous permet de collecter rapidement des statistiques de fragmentation d'index et de détecter les bases de données nécessitant une maintenance. Vous pouvez instantanément reconstruire et réorganiser les index SQL Server en mode visuel ou générer des scripts SQL pour une utilisation future. dbForge Index Manager pour SQL Server augmentera considérablement vos performances sans trop d'effort.