Jointure par hachage, jointure par fusion ou boucle imbriquée
Reconnaissez les trois principales stratégies de jointure, leurs profils de coût et les situations dans lesquelles chacune constitue le meilleur choix du planificateur.
Jointure par hachage, jointure par fusion ou boucle imbriquée est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
Trois stratégies de jointure
PostgreSQL dispose de trois algorithmes physiques de jointure :
- Boucle imbriquée — analyse l’intérieur pour chaque ligne extérieure
- Jointure par hachage — construit un hachage de l’intérieur, puis le sonde avec l’extérieur
- Jointure par fusion — trie les deux côtés et les fusionne simultanément
Boucle imbriquée
La plus simple : extérieur × intérieur. Rapide lorsque l’intérieur possède un bon index AND que l’extérieur est petit :
EXPLAIN ANALYZE
SELECT * FROM users u JOIN orders o ON o.user_id = u.id
WHERE u.id = 42;
-- Nested Loop
-- -> Index Scan on users where id = 42 (rows=1)
-- -> Index Scan on orders_user_id_idx (rows=5)Quand la boucle imbriquée l’emporte
Le côté extérieur contient peu de lignes AND l’intérieur possède un index sur la clé de jointure : la boucle imbriquée est extrêmement rapide. Pire des cas : O(extérieur × intérieur).
Jointure par hachage
Construisez une table de hachage sur un côté (généralement le plus petit), puis sondez-la avec l’autre. Cette stratégie convient très bien pour joindre deux grandes tables lorsqu’aucun index utile n’existe sur la clé de jointure :
EXPLAIN ANALYZE
SELECT * FROM big_a a JOIN big_b b ON a.key = b.key;
-- Hash Join (cost=10000..50000)
-- -> Seq Scan on big_a
-- -> Hash
-- -> Seq Scan on big_bQuand la jointure par hachage l’emporte
Deux tables moyennes à grandes, aucun bon index sur la clé de jointure, ou un besoin de nombreuses lignes de la part du planificateur. Limite de mémoire : la table de hachage doit tenir dans work_mem, sinon elle est déversée sur le disque.
Jointure par fusion
Les deux côtés sont triés sur la clé de jointure, puis parcourus simultanément. Cette stratégie convient très bien lorsque les deux côtés sont déjà triés (par exemple par un index correspondant) :
EXPLAIN ANALYZE
SELECT * FROM big_a a JOIN big_b b ON a.key = b.key
ORDER BY a.key;
-- Merge Join
-- -> Index Scan on big_a (a.key ASC)
-- -> Index Scan on big_b (b.key ASC)Quand la jointure par fusion l’emporte
Deux entrées volumineuses déjà triées. Parcours linéaire et faible consommation de mémoire. Le coût du tri compte : si les deux côtés doivent être triés explicitement, le hachage l’emporte généralement.
Choisir entre ces stratégies
Le planificateur se base sur :
- Le nombre estimé de lignes
- Les index disponibles
- La mémoire (
work_mem) - Les constantes de coût dans postgresql.conf
Forcer une stratégie (uniquement pour le diagnostic)
Pour le débogage, vous pouvez désactiver des stratégies :
SET enable_hashjoin = off;
SET enable_mergejoin = off;
SET enable_nestloop = off;
-- Re-run EXPLAIN to see what the planner picks instead.
-- NEVER persist these in production.Déversement sur le disque
Si la table de hachage ou le tri dépasse work_mem, l’opérateur déverse des fichiers temporaires sur le disque — ce qui est beaucoup plus lent. Augmentez work_mem ou réécrivez la requête.
Jointures parallèles
PostgreSQL peut exécuter en parallèle les jointures par hachage et par fusion (ainsi que les analyses séquentielles et d’index) — cela apparaît sous la forme de Parallel Hash Join avec Workers Planned dans EXPLAIN.
Lire le choix du planificateur
Dans EXPLAIN ANALYZE, le nom du nœud de jointure vous indique la stratégie. Le choix est presque toujours correct ; lorsqu’il ne l’est pas, concentrez-vous sur les statistiques et les index avant de forcer une stratégie.
Récapitulatif
Les trois stratégies de jointure répondent à des configurations différentes.
- Boucle imbriquée : extérieur petit + intérieur indexé
- Hachage : grandes tables, aucun index utile
- Fusion : entrées déjà triées
Vérification rapide
Vous joignez deux tables de 10 millions de lignes sur une colonne non indexée. Quel algorithme de jointure le planificateur choisira-t-il probablement ?
Questions Fréquemment Posées
La leçon « Jointure par hachage, jointure par fusion ou boucle imbriquée » est-elle gratuite ?
Oui — le texte complet de « Jointure par hachage, jointure par fusion ou boucle imbriquée » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Jointure par hachage, jointure par fusion ou boucle imbriquée » ?
Reconnaissez les trois principales stratégies de jointure, leurs profils de coût et les situations dans lesquelles chacune constitue le meilleur choix du planificateur. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Jointure par hachage, jointure par fusion ou boucle imbriquée » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Lire EXPLAIN et EXPLAIN ANALYZE
- Parcours séquentiels ou parcours d’index
- Jointure par hachage, jointure par fusion ou boucle imbriquée
- Repérer et corriger les requêtes lentes