Bonjour,
j'aurais voulu connaitre la signification de NESTED LOOP et HASH JOIN dans un plan d'exécution et leur différence.
Lequel des 2 est plus optimal et pourquoi?
Bonjour,
j'aurais voulu connaitre la signification de NESTED LOOP et HASH JOIN dans un plan d'exécution et leur différence.
Lequel des 2 est plus optimal et pourquoi?
Le béaba du DBA (ça rime)
Jointure entre 2 tables :
1) table A : nb enreg important, B faible :
Oracle grace aux estimations issues des Statistiques, va choisir dans ce cas un NESTED LOOP (Boucle imbriqué ):
Il prend chaque enreg de A et vérifie qui le trouve dans B
Donc le nombre de test = A x B
2) table A : nb enreg important, B nb enreg important :
Dans ce cas on fait du HASH JOIN (Haschage)
Calul du clé de HASH pour tous les enregistrements de A. Ensuite pour chaque clé de Hash de B, il regarde si il a déjà cette clé sur A. Si oui il garde l'enreg.
Il existe aussi les MERGE JOIN.
Si les stats sont incorrects, Oracle peut partir en NESTED LOOP à tort, et cela est très dévastateur.
merc.
et c'est quoi le principe du merge join?
t'as un lien où sont expliqués les différents résultats d'un explain plan?
Bonjour,
Si quelqu'un a une réponse à farenheiit, cela rendrait des gens heureux :-). je suis vraiment intéressé
(je suis en oracle 10gR2)t'as un lien où sont expliqués les différents résultats d'un explain plan?
Merci bien.
LBO72.
Les différents types de jointures sont assez bien documentées dans le Performance Tuning Guide.
Il y a un peu de documentation sur EXPLAIN PLAN ici et là.
Le reste on peut le trouver dans le livre de C. Antognini: Troubleshooting Oracle Performance.
Partager