Zaczynam się uczyć planów wykonania i jestem zdezorientowany, jak dokładnie działa dopasowanie mieszające i dlaczego miałoby być użyte w prostym złączeniu:
select Posts.Title, Users.DisplayName
From Posts JOIN Users on
Posts.OwnerUserId = Users.Id
OPTION (MAXDOP 1)
Jak rozumiem, wyniki skanowania indeksu górnego stają się skrótem i każdy wiersz w dolnym skrypcie klastrowym indeksu jest sprawdzany. Rozumiem, w jaki sposób tabele skrótów działają przynajmniej w pewnym stopniu, ale nie jestem pewien, które wartości dokładnie zostały zakodowane w takim przykładzie.
Co miałoby dla mnie sens to wspólne pole między nimi, identyfikator, jest mieszane - ale jeśli tak jest, to dlaczego haszować liczbę?
źródło
OPTION (FAST n)
podpowiedzi, gdzie n jest przybliżoną liczbą wierszy, której się spodziewasz. Spowoduje to odchylenie optymalizatora w kierunku zagnieżdżonych pętli zamiast łączenia skrótów, gdy n jest niskie. Powodem jest to, że złączenia mieszające są szybkie dla dużych złączeń, ale mają wysokie koszty uruchomienia. Pętle zagnieżdżone są drogie za wiersz, ale można zacząć bardzo tanio. Jest to więc kwestia dostrajania w oparciu o rzeczywiste dane i wzorzec dostępu.From http://sqlinthewild.co.za/index.php/2007/12/30/execution-plan-operations-joins/
„Łączenie mieszające jest jedną z droższych operacji łączenia, ponieważ wymaga utworzenia tabeli skrótów, aby wykonać łączenie. To powiedziawszy, to połączenie jest najlepsze dla dużych, nieposortowanych danych wejściowych. z dołączeń
Łączenie mieszające najpierw odczytuje jedno z danych wejściowych i haszuje kolumnę łączenia, a następnie umieszcza wynikowy skrót i wartości kolumny w tabeli skrótów wbudowanej w pamięć. Następnie odczytuje wszystkie wiersze na drugim wejściu, haszy je i sprawdza wiersze w wynikowym segmencie mieszania pod kątem łączenia wierszy. ”
który prowadzi do tego postu:
http://blogs.msdn.com/b/craigfr/archive/2006/08/10/687630.aspx
HTH
źródło
Zaletą mieszania pola numerycznego jest to, że bierzesz większą wartość i dzielisz ją na mniejsze części, aby zmieściła się w tabeli mieszania.
Oto jak opisuje to Grant Fritchey:
„Z drugiej strony tabela skrótów to struktura danych, która dzieli wszystkie elementy na kategorie o równej wielkości lub segmenty, aby umożliwić szybki dostęp do elementów. Funkcja skrótu określa, do którego segmentu trafia element. Na przykład , możesz pobrać wiersz z tabeli, mieszać go w wartość skrótu, a następnie przechowywać wartość skrótu w tabeli skrótów. ”
Możesz także uzyskać bezpłatną kopię jego ebooka „Analiza planów SQL Server” z linku z następującego artykułu:
Źródło: http://www.simple-talk.com/sql/performance/graphical-execution-plans-for-simple-sql-queries/
źródło