Vnořené spojení smyček, nazývané také vnořená iterace, používá jeden vstup spojení jako vnější vstupní tabulku (v grafickém plánu provádění je zobrazen jako horní vstup; viz obrázek 1 níže) a druhý vstup jako vnitřní vstupní tabulku. Vnější smyčka spotřebovává vnější vstupní tabulku řádek po řádku. Vnitřní smyčka, prováděná pro každý vnější řádek, hledá odpovídající řádky ve vnitřní vstupní tabulce. Níže uvedený výpis je příkladem, který vytváří vnořené spojení smyček.

--Nested Loop Join SELECT C.CustomerID, c.TerritoryID FROM Sales.SalesOrderHeader oh JOIN Sales.Customer c ON c.CustomerID = oh.CustomerID WHERE c.CustomerID IN (10,12) GROUP BY C.CustomerID, c.TerritoryID

Poznámka: Je k dispozici ke stažení na wrox.com.

Wiley Admin 13_26

Obrázek 1. Vnořené spojení smyček. Ukázkový plán provádění pro vnořené spojení smyček

Vnořené spojení smyček je obzvláště efektivní, pokud je vnější vstup malý a vnitřní vstup je setříděný a velký. V mnoha malých transakcích, například těch, které se týkají pouze malé množiny řádků, je indexované vnořené smyčkové spojení lepší než slučovací i hashovací spojení. Ve velkých dotazech však vnořené smyčkové spoje často nejsou optimální volbou. Přítomnost operátoru vnořeného spojení smyček v plánu provádění samozřejmě neznamená, zda se jedná o efektivní plán. Vnořené spojení smyček je výchozím algoritmem. To neznamená, že je prvním použitým algoritmem (tím by byl hash join v paměti), ale že může být použit vždy, pokud specifickým kritériím vyhovuje jiný algoritmus. Například algoritmus „vyžaduje spojení“ musí být equijoin. (Podmínka spojení je založena na operátoru rovnosti.)

V příkladovém dotazu je provedeno vyhledání shlukového indexu ve vnější tabulce Customer, kde CustomerID je 10 nebo 12, a pro každé CustomerID je provedeno vyhledání indexu ve vnitřní tabulce SalesOrderHeader. Index IX_SalesOrderHeader_CustomerID je tedy v tabulce SalesOrderHeader hledán dvakrát (jednou pro CustomerID 10 a jednou pro CustomerID 12)

.

Articles

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.