Unterschied zwischen Hash, Merge und Loop Join?

40

In SQL Server können Sie die Verknüpfungshinweise angeben:

  • HASH JOIN
  • MERGE JOIN
  • LOOP JOIN

Wie sind diese drei Verknüpfungshinweise definiert und wann sollten sie verwendet werden?

Andrew Bickerton
quelle

Antworten:

37

In MSDN im Thema Erweiterte Abfrageoptimierungskonzepte :

SQL Server verwendet drei Arten von Verknüpfungsvorgängen:

  • Joins mit verschachtelten Schleifen

  • Verknüpfungen zusammenführen

  • Hash schließt sich an

Wenn eine Verknüpfungseingabe klein ist (weniger als 10 Zeilen) und die andere Verknüpfungseingabe ziemlich groß und in ihren Verknüpfungsspalten indiziert ist, ist eine Verknüpfung mit verschachtelten Indexschleifen die schnellste Verknüpfungsoperation, da sie die wenigsten E / A-Vorgänge und die wenigsten Vergleiche erfordert. Weitere Informationen zu verschachtelten Schleifen finden Sie unter Grundlegendes zu Joins für verschachtelte Schleifen.

Wenn die beiden Join-Eingaben nicht klein sind, aber nach ihrer Join-Spalte sortiert sind (z. B. wenn sie durch Scannen sortierter Indizes erhalten wurden), ist ein Merge-Join die schnellste Join-Operation. Wenn beide Join-Eingaben groß und die beiden Eingaben ähnlich groß sind, bieten ein Merge-Join mit vorheriger Sortierung und ein Hash-Join eine ähnliche Leistung. Hash-Verknüpfungsoperationen sind jedoch häufig viel schneller, wenn sich die beiden Eingabegrößen erheblich voneinander unterscheiden. Weitere Informationen finden Sie unter Grundlegendes zu Zusammenführungsverknüpfungen.

Hash-Joins können große, unsortierte, nicht indizierte Eingaben effizient verarbeiten.

Ich bin jedoch der Meinung, dass Sie mit einem grundlegenderen Thema beginnen sollten: Abfrageoptimierung und schließlich die Verwendung der Abfragehinweise.

Marian
quelle
5
Einverstanden ist, dass das Einfügen eines Verknüpfungshinweises nur als letzter Ausweg bleibt (manchmal nützlich, wenn die geschätzten Daten erheblich von den tatsächlichen Daten abweichen).
Andrew Bickerton