Algoritmul de alăturare a buclei imbricate

Algoritmul de îmbinare a buclelor imbricate este o variație a algoritmului de îmbinare .

Ideea generală a algoritmului

În cazul general, algoritmul primește n tabele și condiții de unire ca intrare. Rezultatul muncii sale este un set de rânduri cu rezultatele conexiunii.

Simplificând la două tabele, algoritmul poate fi descris astfel: pentru fiecare rând al unuia dintre tabele (master), se efectuează o căutare în celălalt tabel (slave) a rândurilor care se potrivesc condiției de îmbinare.

În cel mai general caz, aceasta este construcția treptată a produsului cartezian al tabelelor originale cu analiza condiției de îmbinare pentru fiecare dintre combinațiile de rânduri. În  pseudocod , acesta poate fi scris astfel:

Pentru fiecare rând [r] din [Tabelul cheilor] Pentru fiecare rând(e) din [Tabel ghidat] Dacă SatisfyCondition([r],[s],[Join Condition]) Ieșire ([r],[s]);

Dacă tabela slave are un index aplicabil condiției de îmbinare selectată, îmbinarea poate fi realizată mult mai eficient. În pseudocod, acest lucru poate fi exprimat după cum urmează:

Pentru fiecare rând [r] din [Tabelul cheilor] Output([r], SearchIndex([Guided Table], [r], [Join Condition]));

Descrierea detaliată a algoritmului

Algoritmul constă dintr-un număr arbitrar de iterații imbricate de căutare a datelor în fiecare dintre tabelele unite.

Bucla exterioară caută rânduri în tabelul pivot . Dacă unele sau toate constrângerile din tabelul principal pot fi folosite pentru a căuta prin index, atunci la fiecare iterație a buclei, se caută locația tuturor rândurilor necesare în index și se realizează un acces direct la tabel. În caz contrar, întregul tabel este scanat. Limitele rămase sunt folosite pentru a filtra rândurile selectate. Pentru fiecare rând rămas, bucla interioară se numește .

Bucla interioară caută rânduri în tabelul slave după condițiile de îmbinare și datele buclei exterioare . Dacă unele sau toate constrângerile de pe tabela slave , împreună cu constrângerile obținute din bucla exterioară, pot fi folosite pentru a căuta prin index, atunci la fiecare iterație a buclei, locațiile tuturor rândurilor necesare sunt căutate în index. si se realizeaza accesul direct la masa slave . În caz contrar, întregul tabel este scanat. Limitele rămase sunt folosite pentru a filtra rândurile selectate.

La fiecare iterație a buclei celei mai profunde, rândurile selectate din tabele sunt concatenate pentru a obține rândurile rezultatului final.

În general, buclele pot fi imbricate de un număr arbitrar de ori, în funcție de numărul de tabele implicate în îmbinare.

Dacă o căutare de index este efectuată într-o buclă și toate coloanele din index sunt suficiente pentru a obține rezultatul final, atunci accesul direct la tabel din această buclă nu este efectuat.

Beneficii

Dezavantaje

Vezi și

Link -uri