Chapitre 4. Opération de jointure


Une requête SQL arrive dans un bar et voit deux tables.
Elle s’approche des tables et leur demande « Puis-me joindre à vous ? »

— Source : inconnu

L’opération de jointure transforme un modèle normalisé en une forme dénormalisée qui convient à un traitement spécifique. Joindre plusieurs relations est une opération très sensible aux latences d’accès des disques car cette opération combine des fragments de données réparties sur le disque. Une bonne indexation est de nouveau la meilleure solution pour réduire les temps de réponse. Le bon index dépend principalement de l’algorithme choisi, parmi trois, pour effectuer la jointure.

« Que vous débutiez en SQL ou que vous soyez un utilisateur aguerri, ce livre vous aidera sûrement dans vos tâches SQL quotidiennes »
C. Cote sur Amazon.fr (5 stars)

Cependant, il existe un comportement commun à tous les algorithmes de jointure : ils traitent seulement deux tables à la fois. Une requête SQL comprenant plus de tables nécessite plusieurs étapes : tout d’abord construire un résultat intermédiaire provenant de la jointure de deux tables, puis joindre ce résultat avec la table suivante, et ainsi de suite.

Envoi des résultats intermédiaires par pipeline

Malgré l’existence de résultats intermédiaires, cela ne signifie pas que la base de données doit les matérialiser. Autrement dit, elle n’a pas besoin d’avoir le résultat complet de la première jointure avant de commencer la jointure suivante. Les bases de données utilisent des pipelines pour réduire l’utilisation de la mémoire. Chaque ligne provenant du résultat intermédiaire est immédiatement envoyée via le pipeline à la prochaine opération de jointure, évitant ainsi d’avoir à écrire le résultat intermédiaire.

Même si l’ordre de jointure n’a aucun impact sur le résultat final, il affecte les performances. Du coup, l’optimiseur va évaluer toutes les permutations possibles dans l’ordre de jointure et sélectionner le meilleur. L’optimisation d’une requête complexe peut de ce fait devenir un souci pour les performances. Plus il y a de tables à joindre et plus il existe de variantes de plans d’exécution. En langage mathématique : n! (croissance factorielle). Néanmoins, cela n’est pas un problème lors de l’utilisation de paramètres liés.

Important

Plus une requête est complexe, plus il est important d’utiliser les paramètres liés.

Ne pas utiliser les paramètres liés revient à recompiler un programme à chaque utilisation.

Trouvé une erreur?