Bonjour à tous,
dans quel cas de figure une jointure de type MERGE est plus performante qu'une NESTD LOOP ou une Jointure HASH ( comparaisons des différentes méthodes)
Cordialement.
Bonjour à tous,
dans quel cas de figure une jointure de type MERGE est plus performante qu'une NESTD LOOP ou une Jointure HASH ( comparaisons des différentes méthodes)
Cordialement.
NESTED_LOOP si peu de données dans la table interne (la table conduite).
HASH JOIN si les deux tables sont volumineuses.
MERGE JOIN si les données sont déjà triées.
Merci pour votre réponse:
sachant qu'on peut utiliser des HINT pour forcer oracle à utiliser une autre méthode de jointure que celle proposée par l'optimiseur, ma question est de savoir, dans le cas d'une jointure sur plusieurs tables, sur quelle base on choisi une méthode et non pas une autre.
Cordialement.
N'utilisez jamais les Hints pour le version production. Assurez-vous que les statistiques disponible pour l'optimiseur correctes. En cas de problèmes essayez de comprendre que est-ce que va mal. En gros les problèmes vient des:
- distributions non uniformes des données et manque des histogrammes
- problèmes de peek binding surtout en présence des histogrammes
- statistics obsolétes, valeurs min, max
- corrélations entres les valeurs des colonnes d'une même table
- erreurs dans l'aproximation des cardinalitès
Merci pour ces détails
L'utilisation des Hint parfois permet de résoudre d'importants soucis de perf, pour un cas bien particulier j'ai forcé oracle à faire une jointure de type HASH à la place d'une NEST LOOP proposée par l'optimiseur (le temps de traitement est passé de 25 heures à 1heure 3minutes), en plus, avec le NEST LOOP la requête se plante à chaque lancement.
Pour votre réponse, concernant les statistiques, comment je pourrai tester la qualité de ces statistiques pour éviter d'utiliser les Hint et de laisser oracle choisir un meilleur plan d'exécution.
Cordialement.
Partager