Sisäkkäisen silmukan liittymisalgoritmi

Sisäkkäisten silmukoiden liitosalgoritmi on liitosalgoritmin muunnelma .

Algoritmin yleinen idea

Yleisessä tapauksessa algoritmi vastaanottaa syötteenä n taulukkoa ja liitosehtoa. Sen työn tulos on joukko rivejä, joissa on yhteyden tulokset.

Yksinkertaistaen kahteen taulukkoon algoritmi voidaan kuvata seuraavasti: yhden taulukon jokaiselle riville (master) suoritetaan haku toisesta taulukosta (slave) riveille, jotka vastaavat liitosehtoa.

Yleisimmässä tapauksessa tämä on alkuperäisten taulukoiden karteesisen tuotteen asteittainen rakentaminen kunkin riviyhdistelmän liitosehdon analysoinnilla. Pseudokoodissa  tämä voidaan kirjoittaa näin:

[Avaintaulukon] jokaiselle riville[r] Jokaiselle riville [Opastettu taulukko] Jos Satisfy Condition([r], [s], [Join Condition]) Lähtö ([r], [s]);

Jos orjataulukossa on valittuun liitosehtoon soveltuva indeksi , liitos voidaan suorittaa paljon tehokkaammin. Pseudokoodissa tämä voidaan ilmaista seuraavasti:

[Avaintaulukon] jokaiselle riville[r] Output([r], SearchIndex([Opastettu taulukko], [r], [Join Condition]));

Yksityiskohtainen kuvaus algoritmista

Algoritmi koostuu mielivaltaisesta määrästä sisäkkäisiä iteraatioita tietojen etsimiseksi kustakin yhdistetystä taulukosta.

Ulompi silmukka etsii rivejä pivot-taulukosta . Jos joitakin tai kaikkia johtavan taulukon rajoituksia voidaan käyttää indeksin läpi etsimiseen, silmukan jokaisessa iteraatiossa etsitään kaikkien tarvittavien rivien sijainti indeksistä ja suoritetaan suora pääsy taulukkoon. Muussa tapauksessa koko taulukko skannataan. Jäljellä olevia rajoja käytetään valittujen rivien suodattamiseen. Jokaiselle jäljellä olevalle riville sisempi silmukka on nimeltään .

Sisäinen silmukka etsii rivejä orjataulukosta liitosehtojen ja ulkoisen silmukan tietojen perusteella . Jos joitakin tai kaikkia orjataulukon rajoituksia yhdessä ulkosilmukasta saatujen rajoitusten kanssa voidaan käyttää indeksin läpi hakemiseen, niin silmukan jokaisessa iteraatiossa etsitään kaikkien tarvittavien rivien paikat indeksistä. ja suora pääsy orjapöytään suoritetaan . Muussa tapauksessa koko taulukko skannataan. Jäljellä olevia rajoja käytetään valittujen rivien suodattamiseen.

Jokaisessa syvimmän silmukan iteraatiossa taulukoista valitut rivit ketjutetaan lopullisen tuloksen rivien saamiseksi.

Yleensä silmukat voidaan upottaa mielivaltaisen määrän kertoja liittämiseen liittyvien taulukkojen lukumäärän mukaan.

Jos indeksihaku suoritetaan jossakin silmukassa ja kaikki indeksin sarakkeet riittävät lopullisen tuloksen saamiseksi, suoraa pääsyä tämän silmukan taulukkoon ei suoriteta.

Edut

Haitat

Katso myös

Linkit