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
Sécuriser votre système d’impression
Longtemps sous-estimée, la sécurisation d’un système d’impression d’entreprise doit être pleinement prise en compte afin de limiter le risque de fuite d’informations sensibles. Voici les 3 principales précautions à prendre.
Les articles les plus consultés
- Dark Web : où sont vos données dérobées ?
- Stockage autonome, Evolutivité & Gestion intelligente, Pure Storage offre de nouvelles perspectives aux entreprises
- ActiveViam fait travailler les data scientists et les décideurs métiers ensemble
- Databricks lève 1 milliard de dollars !
- L’utilisation des données pour survivre !
Les plus consultés sur iTPro.fr
- Défis et bénéfices d’infuser l’IA dans l’analytique et la BI
- Mieux protéger l’entreprise à l’ère du travail hybride et du Cloud
- Les entreprises concentrent les investissements sur l’innovation, l’efficacité et la résilience
- L’IA profite au marché du mobile !
- La législation européenne sur l’IA entre en vigueur. Comment s’y préparer au mieux ?