Den nested loop join, også kaldet nested iteration, bruger et join-input som den ydre inputtabel (vist som det øverste input i den grafiske eksekveringsplan; se figur 1 nedenfor) og det andet input som den indre inputtabel. Den ydre sløjfe bruger den ydre inputtabel række for række. Den indre sløjfe, der udføres for hver ydre række, søger efter matchende rækker i den indre indgangstabel. Nedenstående liste er et eksempel, der producerer en nested loop join.

--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

Note: Dette er tilgængeligt til download på wrox.com.

Wiley Admin 13_26<7292

Figur 1. Eksempel på udførelsesplan for nested loop join

En nested loop join er særlig effektiv, hvis det ydre input er lille, og det indre input er sorteret og stort. I mange små transaktioner, f.eks. transaktioner, der kun berører et lille sæt af rækker, er indekserede nested loop-joins bedre end både merge-joins og hash-joins. I store forespørgsler er nested loop joins imidlertid ofte ikke det optimale valg. Selvfølgelig indikerer tilstedeværelsen af en nested loop join-operator i eksekveringsplanen ikke, om det er en effektiv plan. En nested loop join er standardalgoritmen. Det betyder ikke, at det er den første algoritme, der anvendes (det ville være in-memory hash-joint), men at den altid kan anvendes, hvis en anden algoritme opfylder de specifikke kriterier. F.eks. skal algoritmen “kræver join” være equijoin. (Join-begrebet er baseret på lighedsoperatoren.)

I eksempelforespørgslen udføres der en clusteret indekssøgning på den ydre tabel Customer, hvor CustomerID er 10 eller 12, og for hvert CustomerID udføres der en indekssøgning på den indre tabel SalesOrderHeader. Derfor søges indeks IX_SalesOrderHeader_CustomerID to gange (én gang for CustomerID 10 og én gang for CustomerID 12) i tabellen SalesOrderHeader.

Articles

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.