Joncțiunea în buclă imbricata, denumită și iterație imbricata, utilizează o intrare de îmbinare ca tabel de intrare exterior (prezentată ca intrare de sus în planul grafic de execuție; a se vedea figura 1 de mai jos) și cealaltă intrare ca tabel de intrare interior. Bucla exterioară consumă tabelul de intrare exterior rând cu rând. Bucla interioară, executată pentru fiecare rând exterior, caută rândurile corespunzătoare în tabelul de intrare interior. Lista de mai jos este un exemplu care produce o îmbinare în buclă imbricata.

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

Nota: Aceasta este disponibilă pentru descărcare pe wrox.com.

Wiley Admin 13_26

Figura 1. Exemplu de plan de execuție pentru o îmbinare în buclă imbricata

O îmbinare în buclă imbricata este deosebit de eficientă dacă intrarea exterioară este mică și intrarea interioară este sortată și mare. În multe tranzacții mici, cum ar fi cele care afectează doar un set mic de rânduri, îmbinările indexate în buclă imbricate sunt superioare atât îmbinărilor prin fuziune, cât și îmbinărilor hash. Cu toate acestea, în cazul interogărilor de mari dimensiuni, îmbinările în buclă imbricate nu reprezintă adesea alegerea optimă. Desigur, prezența unui operator de îmbinare a buclelor imbricate în planul de execuție nu indică dacă acesta este un plan eficient. O îmbinare în buclă imbricata este algoritmul implicit. Acest lucru nu înseamnă că acesta este primul algoritm utilizat (acesta ar fi join-ul hash în memorie), ci că poate fi aplicat întotdeauna dacă un alt algoritm corespunde criteriilor specifice. De exemplu, algoritmul „requires join” trebuie să fie equijoin. (Condiția de alăturare se bazează pe operatorul de egalitate.)

În interogarea de exemplu, se efectuează o căutare a indexului grupat pe tabelul exterior Customer în cazul în care CustomerID este 10 sau 12 și, pentru fiecare CustomerID, se efectuează o căutare a indexului pe tabelul interior SalesOrderHeader. Prin urmare, indexul IX_SalesOrderHeader_CustomerID este căutat de două ori (o dată pentru CustomerID 10 și o dată pentru CustomerID 12) în tabelul SalesOrderHeader.

.

Articles

Lasă un răspuns

Adresa ta de email nu va fi publicată.