2011-06-30 26 views

Odpowiedz

21

LOOP | HASH | MERGE to Join podpowiedzi Określa, że ​​sprzężenie w zapytaniu powinno używać pętli, mieszania lub łączenia. Używanie LOOP | HASH | MERGE JOIN Wymusza określone sprzężenie między dwiema tabelami. LOOP nie może być określona razem z PRAWEM lub PEŁNYM jako typ połączenia

Powinieneś zawsze używać INNER JOIN. Niech optymalizator zapytań zdecyduje, czy chce dołączyć LOOP, MERGE lub HASH. Przekonasz się, że prawie we wszystkich przypadkach optymalizator dokona lepszej oceny. Który z nich będzie używany i kiedy można go znaleźć w mojej prezentacji http://sqlbits.com/Sessions/Event4/Understanding_Graphical_Execution_Plans.

+0

cytować "Pozwól, aby optymalizator zapytania zdecydował (sic)". Jak to się stało (w zasadzie)? Poprzez statystyki? –

+1

Różne rodzaje łączenia są zoptymalizowane dla różnych semantyki zapytań, i tak, są one w większości oparte na statystykach/liczności, ale także inne czynniki, takie jak to, czy jedna strona połączenia jest znacznie większa niż druga strona, czy wejście z każdej strony Łączenie jest sortowane itd. Jestem z innymi ... jeśli posty na blogu o tym dmuchają, znacznie lepiej jest zdecydować się na decyzję optymalizatora, dopóki nie opanujesz różnic między typami łączenia * i * czujesz, że jesteś mądrzejszy od optymalizatora. –

+0

@ pure.Krone. Masz rację . Chociaż nie wiadomo mi o extact algo, wiem, że jest to funkcja Statystyka podkreślonych tabel i indeksów, sposób tworzenia grup plików dla podkreślonych obiektów, brak rdzeni serwera (MAXDOP) i wiele innych czynników. Jeśli chcesz głęboko zagłębić się, proponuję przeczytać Blog Connora Cunninghama, który jest Głównym Architektem MS SQL Core. – Ash

8

To, o czym mówisz, to join hint. Podobnie jak inne wskazówki, wskazówki dołączania powinny być podawane tylko w ostateczności, ponieważ większość czasu serwer SQL wybiera prawidłowy algorytm. Dobrym artykułem wyjaśniającym niektóre z nich jest this.