A beágyazott hurokcsatlakozás, más néven beágyazott iteráció, az egyik csatolási bemenetet külső bemeneti táblaként használja (a grafikus végrehajtási tervben felső bemenetként látható; lásd az alábbi 1. ábrát), a másik bemenetet pedig belső bemeneti táblaként. A külső ciklus soronként fogyasztja a külső bemeneti táblázatot. A belső ciklus, amely minden egyes külső sorra végrehajtódik, a belső bemeneti táblázatban keresi a megfelelő sorokat. Az alábbi felsorolás egy olyan példát mutat be, amely egy egymásba ágyazott hurokcsatlakozást eredményez.

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

Megjegyzés: Ez letölthető a wrox.com webhelyről.

Wiley Admin 13_26

1. ábra. Minta végrehajtási terv a beágyazott hurokcsatlakozáshoz

A beágyazott hurokcsatlakozás különösen hatékony, ha a külső bemenet kicsi, a belső bemenet pedig rendezett és nagy. Sok kis tranzakcióban, például olyanokban, amelyek csak egy kis sorhalmazt érintenek, az indexelt, egymásba ágyazott hurokösszekötések jobbak mind a merge-összekötéseknél, mind a hash-összekötéseknél. Nagyméretű lekérdezéseknél azonban az egymásba ágyazott hurokösszekötések gyakran nem az optimális választás. Természetesen az egymásba ágyazott hurokösszekötés operátor jelenléte a végrehajtási tervben nem jelzi, hogy hatékony tervről van-e szó. Az egymásba ágyazott hurokcsatlakozás az alapértelmezett algoritmus. Ez nem azt jelenti, hogy ez az elsőként használt algoritmus (ez lenne a memórián belüli hash join), hanem azt, hogy mindig alkalmazható, ha egy másik algoritmus mégis megfelel az adott kritériumoknak. Például a “requires join” algoritmusnak az equijoin algoritmusnak kell lennie. (Az egyesítési feltétel az egyenlőségi operátoron alapul.)

A példakérdésben egy fürtözött indexkeresés történik a Customer külső táblán, ahol a CustomerID 10 vagy 12, és minden CustomerID-re egy indexkeresés történik a belső SalesOrderHeader táblán. Ezért az IX_SalesOrderHeader_CustomerID indexet kétszer keresi a SalesOrderHeader táblában (egyszer a CustomerID 10 és egyszer a CustomerID 12 esetében).

Articles

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.