Dans Oracle, je peux utiliser les conseils USE_HASH
ou USE_MERGE
à l'optimiseur de faire une jointure de hachage ou d'une jointure tri-fusion. En quoi ces types de jointures sont-ils différents et quand/pourquoi devrais-je utiliser l'un ou l'autre?Dans Oracle, quelle est la différence entre une jointure de hachage et une jointure de tri-fusion?
Dans Oracle, quelle est la différence entre une jointure de hachage et une jointure de tri-fusion?
Répondre
La use_hash
pointe demande une jointure de hachage sur les tables spécifiées. Une jointure de hachage charge les lignes de la table de gauche dans une table de hachage en mémoire.
L'indicateur use_merge
force une opération de tri/fusion qui effectue essentiellement une analyse de table complète et crée un index traditionnel à la volée. À savoir, A à Z.
En raison des restrictions de mémoire sur les jointures de hachage, vous voulez les utiliser, en général, que sur les petites tables de la main gauche
Trier les jointures de fusion sont généralement mieux pour les requêtes qui produisent très grand résultat ensembles ou tables qui ne possèdent pas d'index sur les clés de jointure.
Jonathan Lewis a affiché une très bonne explication de la façon dont les jointures de hachage et les jointures de fusion travail:
- Hash rejoint - http://jonathanlewis.wordpress.com/2010/08/10/joins-hj/
- les jointures de fusion - http://jonathanlewis.wordpress.com/2010/08/15/joins-mj/
et pour faire bonne mesure ...
- Joints de boucle imbriqués - http://jonathanlewis.wordpress.com/2010/08/09/joins-nlj/
« quand/pourquoi devrais-je utiliser l'un ou l'autre »
En général, vous ne devriez pas vous inquiéter à ce sujet. C'est ce à quoi sert l'optimiseur Oracle.
- 1. Quelle est la différence entre la jointure interne, la jointure croisée et la jointure extérieure gauche?
- 2. Différence entre la jointure gauche et la jointure externe gauche
- 3. Linq: Quelle est la différence entre == et égal à une jointure?
- 4. La jointure côté carte de Hadoop implémente la jointure de hachage?
- 5. différence sémantique entre les requêtes de jointure
- 6. Jointure externe dans la syntaxe de jointure Oracle classique
- 7. Oracle requête de jointure
- 8. Quelle est la différence entre l'utilisation de Join dans Linq et la syntaxe de jointure ANSI "Olde Style"?
- 9. Oracle gauche jointure externe
- 10. Dans une base de données Oracle, quelle est la différence entre ROWNUM et ROW_NUMBER?
- 11. Différences de jointure SQL
- 12. Comment créer une jointure?
- 13. Quelle est la différence entre une vue et un flux?
- 14. Taille de table de jointure intermédiaire Oracle
- 15. Quelle est la différence entre une instance et un objet?
- 16. Quelle est la différence entre un URI et une URL?
- 17. Quelle est la différence entre une méthode et un protocole
- 18. Quelle est la différence entre dict() et {}?
- 19. Ce qui fait qu'un optimiseur de requête SQL décide entre une boucle imbriquée et une jointure de hachage
- 20. Quelle est la différence entre une syntaxe différente dans jQuery?
- 21. comment faire une jointure à gauche et une condition de jointure> = avec linq
- 22. Quelle est la différence entre une propriété de dépendance et une propriété jointe dans WPF?
- 23. quelle est la différence entre:.! et: r !?
- 24. Quelle est la différence entre = et: =
- 25. AND dans une condition de jointure?
- 26. Sous-requêtes à une seule ligne dans Oracle - quel est le plan de jointure?
- 27. Quelle est la différence entre "$^N" et "$ +"?
- 28. Aide dans une requête de jointure
- 29. Oracle gauche requête de jointure externe
- 30. Quelle est la différence entre ~ et! opérateur?
Je suis d'accord que généralement je ne devrais pas m'inquiéter à ce sujet. Y aurait-il des moments où je devrais m'inquiéter à ce sujet? – Matthew
@Matthew: comme tous les indices, ils font partie d'une stratégie pour ajuster les conditions lorsque l'optimiseur ne peut pas trouver le plan optimal pour une requête (par exemple, lorsque vous en savez plus sur les données, il le fait). Ils doivent être utilisés avec parcimonie car ils limitent les choix de l'optimiseur. –