Chapitre 6. Trier et grouper


Trier est une opération très intensive pour les processeurs. Cependant, le problème principal est que la base de données doit placer temporairement les résultats dans un tampon. Une opération de tri doit lire toutes les données avant de pouvoir renvoyer la première ligne. Les opérations de tri ne peuvent pas être exécutées dans un pipeline, ce qui devient un problème pour les gros ensembles de données.

Un index fournit une représentation ordonnée des données indexées : ce principe a déjà été décrit dans le Chapitre 1. En fait, un index enregistre les données en les pré-triant. L’index est trié comme si nous avions utilisé une clause order by dans la définition de l’index. Il n’est donc pas surprenant que nous puissions utiliser les index pour éviter l’opération de tri tout en satisfaisant la clause order by.

De façon assez ironique, une opération INDEX RANGE SCAN devient elle-aussi inefficace pour de gros volumes de données, tout spécialement si elle est suivie d’un accès à la table. Ceci peut annuler le gain obtenu en évitant l’opération de tri. Un FULL TABLE SCAN avec une opération de tri explicite pourrait même être plus rapide dans ce cas. Encore une fois, c’est à l’optimiseur d’évaluer les différents plans d’exécution et de sélectionner le meilleur.

Le livre d'optimisation SQL destine aux développeurs !

Une exécution d’un order by via un index ne permet pas seulement de gagner sur l’effort de tri. Il est aussi capable de renvoyer les premiers résultats sans traiter les données en entrée. L’order by peut donc être exécuté dans un pipeline. Le Chapitre 7 explique comment exploiter l’exécution en pipeline pour implémenter des requêtes efficaces de pagination. Une exécution en pipeline d’un order by est si importante que j’y vois la troisième puissance de l’indexation.

Note

Le parcours d’un B-Tree est la première puissance de l’indexation.

Le regroupement est la deuxième puissance de l’indexation.

L’exécution en pipeline d’un order by est la troisième puissance de l’indexation.

Ce chapitre explique comment utiliser un index pour l’exécution d’un order by en pipeline. Pour cela, nous allons faire particulièrement attention aux interactions avec la clause where ainsi qu’aux modificateurs ASC et DESC. Le chapitre conclut sur l’application de ces techniques à la clause group by.

Trouvé une erreur?