Różnica między łączeniem Hash, Merge i Loop?


40

W SQL Server można określić wskazówki dotyczące łączenia:

  • HASH DOŁĄCZ
  • ŁĄCZ DOŁĄCZ
  • DOŁĄCZ DO PĘTLI

Jaka jest definicja tych trzech wskazówek dotyczących łączenia i kiedy należy ich używać?

Odpowiedzi:


37

Z MSDN w temacie Zaawansowane koncepcje dostrajania zapytań :

SQL Server wykorzystuje trzy typy operacji łączenia:

  • Łączy się zagnieżdżone pętle

  • Scalanie łączy

  • Hash dołącza

Jeśli jedno wejście sprzężenia jest małe (mniej niż 10 wierszy), a drugie wejście sprzężenia jest dość duże i zindeksowane w swoich kolumnach łączenia, sprzężenie zagnieżdżonych indeksów pętli jest najszybszą operacją łączenia, ponieważ wymagają najmniejszej liczby operacji we / wy i najmniejszej liczby porównań. Aby uzyskać więcej informacji o zagnieżdżonych pętlach, zobacz Opis połączeń zagnieżdżonych pętli.

Jeśli dwa dane wejściowe łączenia nie są małe, ale są sortowane według kolumny łączenia (na przykład, jeśli zostały uzyskane przez skanowanie posortowanych indeksów), łączenie scalające jest najszybszą operacją łączenia. Jeśli oba wejścia łączenia są duże, a dwa wejścia mają podobną wielkość, połączenie scalające z wcześniejszym sortowaniem i połączenie mieszające oferują podobną wydajność. Jednak operacje łączenia skrótu są często znacznie szybsze, jeśli dwa rozmiary wejściowe znacznie się od siebie różnią. Aby uzyskać więcej informacji, zobacz Opis scalania połączeń.

Złączenia Hash mogą efektywnie przetwarzać duże, nieposortowane, nieindeksowane dane wejściowe.

Uważam jednak, że powinieneś zacząć od bardziej podstawowego tematu: Dostrajanie zapytań, a na koniec przejdź do korzystania ze wskazówek dotyczących zapytań.


5
Uzgodnione, umieszczenie wskazówki dołączenia powinno być pozostawione tylko w ostateczności (czasami przydatne, jeśli dane szacunkowe znacznie różnią się od danych rzeczywistych).
Andrew Bickerton
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.