Alăturare buclă imbricată - Nested loop join

O îmbinare cu buclă imbricată este un algoritm naiv care unește două seturi folosind două bucle imbricate . Operațiunile de asociere sunt importante pentru gestionarea bazelor de date .

Algoritm

Două relații și sunt unite după cum urmează:

algorithm nested_loop_join is
    for each tuple r in R do
        for each tuple s in S do
            if r and s satisfy the join condition then
                yield tuple <r,s>

Acest algoritm va implica transferuri de blocuri n r * b s + b r și căutări n r + b r , unde b r și b s sunt numărul de blocuri în relațiile R și respectiv S, iar n r este numărul de tupluri în relația R .

Algoritmul rulează în I / Os, unde și este numărul de tupluri conținute în și respectiv și poate fi ușor generalizat pentru a uni orice număr de relații ...

Buclă imbricată bloc se alăture algoritm este o generalizare a simplu bucle imbricate algoritm care profită de suplimentare de memorie pentru a reduce numărul de ori că relația este scanată. Încarcă bucăți mari de relație R în memoria principală. Pentru fiecare bucată, scanează S și evaluează condiția de asociere pe toate perechile de tupluri, aflate în prezent în memorie. Aceasta reduce numărul de scanări ale S-ului la o singură bucată.

Variația indexării

Dacă relația interioară are un index pe atributele utilizate în îmbinare, atunci îmbinarea naivă cu buclă cuib poate fi înlocuită cu o îmbinare index.

algorithm index_join is
    for each tuple r in R do
        for each tuple s in S in the index lookup do
            yield tuple <r,s>

Complexitatea timpului pentru această variație se îmbunătățește de la O ( M * N ) la O ( M * log N ).

Vezi si

Referințe