par Dusan Petrovic et Christian Unterreitmeier
La définition d'index sur les colonnes de tri peut améliorer les performances
de manière exceptionnelle
Un index approprié peut considérablement améliorer les performances de tri de
SQL Server.
Par exemple, la définition d'un index clusterisé sur une colonne de tri contraint
la base de données à stocker les enregistrements sous forme triée, ce qui permet
d'extraire les données sans avoir à réaliser de tri supplémentaire. Vous noterez
que SQL Server 7.0 et les versions antérieures permettent de créer des index uniquement
en ordre croissant.
Par conséquent, si votre requête nécessite des données dans un ordre décroissant,
il faudra certainement effectuer un tri supplémentaire et utiliser des tables
de travail internes pour générer des données dans l'ordre approprié.
Cependant, SQL Server 2000 permet de créer des index aussi bien dans un ordre
croissant que décroissant.
SQL Server 2000 permet de créer des index aussi bien dans un ordre croissant
que décroissant.
SQL Server 7.0 effectue une opération de tri lorsqu'on utilise la clause ORDER
BY. L'optimiseur de requêtes de SQL Server est également susceptible d'utiliser
une opération de tri pour traiter une requête utilisant les clauses GROUP BY,
DISTINCT ou UNION. En revanche, on peut utiliser l'indicateur d'index FAST pour
éviter le tri des données.
Cela indique à l'optimiseur de requêtes de SQL Server qu'il doit utiliser un index
non clusterisé correspondant à la clause ORDER BY, éliminant ainsi la nécessité
du tri. Observons comment SQL Server gère les clauses GROUP BY, DISTINCT et UNION
pour trier les données, puis analysons comment les différentes techniques d'indexation
peuvent améliorer les performances des requêtes nécessitant des données triées.
Indexer pour optimiser les performances des tris
La clause GROUP BY permet d’organiser les données par groupes ; tous les enregistrements
d’un groupe possèdent la même valeur pour la (les) colonne(s) spécifiée(s) dans
la clause GROUP BY. Par exemple, la requête
SELECT customerid
FROM orders
GROUP BY customerid
trie les données par groupes en fonction de la colonne customerid. SQL Server
renvoie ensuite un enregistrement pour chaque valeur de colonne distincte. On
peut grouper une table en fonction de n’importe quelle combinaison de ses colonnes.
Dans les versions antérieures à SQL Server 7.0, le logiciel trie toujours les
données avant de constituer les groupes. Pour sa part, SQL Server 7.0 peut utiliser
une technique appelée hachage, au lieu de trier par groupes de colonnes.
Alternative aux index, le hachage offre un accès rapide à des enregistrements
particuliers d’une table. Pour mener à bien le hachage, SQL Server utilise une
fonction de hachage ( h()) pour répartir uniformément toutes les pages dans une
table de hash-coding. La fonction de hachage identifie chaque entrée de la table
qui dispose d’un nombre fixe de buckets. Un bucket est un ensemble de pointeurs
servant d’index à une page.
Chaque bucket contient des entrées d’index composées de deux valeurs : la valeur
de la colonne à partir de laquelle la base de données conçoit la fonction de hachage,
et un pointeur vers l’enregistrement correspondant. La fonction de hachage associe
ensuite chaque valeur de colonne à un nombre, et crée une entrée d’index pour
chaque enregistrement de la table.
L’optimiseur de requêtes de SQL Server décide d’utiliser le tri ou le hachage
pour créer des groupes en fonction de l’opération qui sera la plus performante.
Si vous avez défini un index clusterisé pour la colonne spécifiée dans la clause
GROUP BY, l’optimiseur de requêtes utilise souvent le tri car l’index clusterisé
trie physiquement tous les enregistrements de la table sur le disque. L’optimiseur
peut également choisir d’utiliser le tri si on a défini un index non-clusterisé
pour la colonne GROUP BY si cette méthode offre le traitement le plus rapide.
Cependant, si on n’a pas défini ce type d’index, l’optimiseur de requêtes peut
utiliser le hachage. SQL Server fournit également deux indicateurs de traitement
de requêtes (HASH GROUP et ORDER GROUP) que l’on peut utiliser pour contrôler
l’opération GROUP BY. L’indicateur HASH GROUP oblige l’optimiseur à utiliser le
hachage pour créer les groupes, et l’indicateur ORDER GROUP à utiliser le tri.
Lors de l’utilisation de la clause GROUP BY avec les versions de SQL Server antérieures
à la version 7.0, les résultats des requêtes sont donnés dans l’ordre des colonnes
GROUP BY. Par contre, en ce qui concerne SQL Server 7.0, l’ordre des résultats
dépend de la technique de groupage choisie (ou imposée) par l’optimiseur de requêtes.
Si l’optimiseur utilise le tri, SQL Server affiche des résultats triés. Si l’optimiseur
utilise le hachage, la base de données affiche les enregistrements de la table
tels qu’ils apparaissent dans la table de hachage. Cela peut correspondre -ou
pas-à l’ordre attendu. Sans clause ORDER BY, on n’a, par définition, aucun ordre
inhérent pour les données d’une base de données relationnelle. Par conséquent,
pour garantir un résultat ordonné, utilisez la clause ORDER BY.
Téléchargez cette ressource
Plan de sécurité Microsoft 365
Les attaquants savent comment prendre le contrôle de votre tenant Microsoft 365, et vous, savez-vous comment le reprendre en main ?
Les articles les plus consultés
- Intelligence Artificielle : DeepKube sécurise en profondeur les données des entreprises
- Les projets d’intégration augmentent la charge de travail des services IT
- ActiveViam fait travailler les data scientists et les décideurs métiers ensemble
- La blockchain en pratique
- 10 grandes tendances Business Intelligence
Les plus consultés sur iTPro.fr
- La connectivité, nouvelle colonne vertébrale de l’expérience en magasin
- Assises de la Sécurité 2026 : osons remettre l’humain au centre et reprendre les commandes
- Réforme de la facturation électronique 2026 : de la contrainte réglementaire à un véritable enjeu différenciant
- IA : la sécurité se prépare aux accès agentiques
Articles les + lus
Veeam passe à la vitesse supérieure avec iResOps pour Microsoft 365
Visibilité, réputation, clients : ce que les petites entreprises ne pourront plus déléguer en 2027
Le champ de bataille des fournisseurs de services n’est plus l’IA, mais la confiance
Réforme de la facturation électronique 2026 : de la contrainte réglementaire à un véritable enjeu différenciant
Utilities : la résilience des réseaux devient prioritaire face à la pression énergétique
À la une de la chaîne Data
- Veeam passe à la vitesse supérieure avec iResOps pour Microsoft 365
- Visibilité, réputation, clients : ce que les petites entreprises ne pourront plus déléguer en 2027
- Le champ de bataille des fournisseurs de services n’est plus l’IA, mais la confiance
- Réforme de la facturation électronique 2026 : de la contrainte réglementaire à un véritable enjeu différenciant
- Utilities : la résilience des réseaux devient prioritaire face à la pression énergétique
