Publié le 05/04/2024
Par Johan Coureuil
Un index qui se couvre et qui se découvre ?
Un index couvrant est un type d'index qui inclut toutes les colonnes requises pour répondre à une requête. En d'autres termes, il peut satisfaire une requête entièrement à partir de l'index lui-même, sans devoir accéder à la table sous-jacente. Ceci est particulièrement bénéfique en termes de performance, car il réduit les E/S disque nécessaires pour récupérer les données requises.
Il existe plusieurs types d'index en SQL Server :
Index Clustered
: Cet index trie physiquement les lignes de données dans la table ou la vue en fonction des clés d'index. Une table ne peut avoir qu'un seul index clustered, car les données ne peuvent être triées que de manière unique.
Unique Clustered Index
: C'est un index clustered qui garantit que chaque clé d'index est unique. Cela signifie qu'aucune deux lignes ne peuvent avoir la même valeur de clé d'index.
Index Non-Clustered
: Contrairement à un index clustered, un index non-clustered crée une structure distincte pour pointer vers les lignes de données réelles. Une table peut avoir plusieurs index non-clustered.
Unique Non-Clustered Index
: Il s'agit d'un index non-clustered qui assure l'unicité des clés d'index. Il garantit qu'aucune deux lignes ne partagent la même valeur de clé d'index.
Éviter les requêtes telles que SELECT * FROM ...
est recommandé car elles peuvent entraîner des performances médiocres, en particulier si la table a de nombreuses colonnes ou des colonnes de grande taille. Au lieu de cela, il est préférable de spécifier uniquement les colonnes nécessaires dans votre requête, ce qui peut permettre l'utilisation d'un index couvrant. L'utilisation d'un index couvrant permet souvent d'éviter des opérations coûteuses telles que des "Index Scans
" ou "Index Seeks
", et surtout d'éviter des "Key Lookups
", qui sont des recherches supplémentaires dans la table pour récupérer des colonnes non présentes dans l'index.
En termes de gestion de la mémoire et des performances, utiliser des index efficacement permet de tirer parti du "Buffer Pool
" (= cache ram) pour les lectures de données, minimisant ainsi les lectures logiques et physiques du disque, qui peuvent être plus lentes et impacter les performances globales de la base de données.
Pour résumer, choisir le bon type d'index et optimiser les requêtes pour utiliser ces index peut avoir un impact significatif sur la performance de la base de données en réduisant la charge sur les ressources du système, comme la mémoire et le disque.