Nested Loop Join Algoritme

Den indlejrede sløjfer-sammenføjningsalgoritme er en variation af sammenføjningsalgoritmen .

Generel idé om algoritmen

I det generelle tilfælde modtager algoritmen n tabeller og joinbetingelser som input. Resultatet af dets arbejde er et sæt rækker med resultaterne af forbindelsen.

Forenklet til to tabeller kan algoritmen beskrives som følger: For hver række i en af ​​tabellerne (master) udføres en søgning i den anden tabel (slave) efter rækker, der matcher joinbetingelsen.

I det mest generelle tilfælde er dette den gradvise konstruktion af det kartesiske produkt af de originale tabeller med analyse af sammenføjningsbetingelsen for hver af rækkekombinationerne. I  pseudokode kan dette skrives sådan:

For hver række[r] af [Nøgletabel] For hver række[r] fra [Guided Table] If SatisfyCondition([r],[s],[Join Condition]) Output ([r],[s]);

Hvis slavetabellen har et indeks, der er relevant for den valgte join-tilstand, kan sammenføjningen udføres meget mere effektivt. I pseudokode kan dette udtrykkes som følger:

For hver række[r] af [Nøgletabel] Output([r], SearchIndex([Guided Table], [r], [Join Condition]));

Detaljeret beskrivelse af algoritmen

Algoritmen består af et vilkårligt antal indlejrede iterationer af søgning efter data i hver af de sammenføjede tabeller.

Den ydre løkke søger efter rækker i pivottabellen . Hvis nogle eller alle begrænsningerne på den førende tabel kan bruges til at søge gennem indekset, søges der ved hver iteration af løkken efter placeringen af ​​alle nødvendige rækker i indekset, og der udføres en direkte adgang til tabellen. Ellers scannes hele bordet. De resterende grænser bruges til at filtrere de valgte rækker. For hver resterende række kaldes den indre løkke .

Den indre sløjfe søger efter rækker i slavetabellen ved joinbetingelser og data for den ydre sløjfe . Hvis nogle eller alle begrænsningerne på slavetabellen , sammen med begrænsningerne opnået fra den ydre løkke, kan bruges til at søge gennem indekset, så søges der ved hver iteration af løkken efter placeringerne af alle nødvendige rækker i indekset og direkte adgang til slavetabellen udføres . Ellers scannes hele bordet. De resterende grænser bruges til at filtrere de valgte rækker.

Ved hver iteration af den dybeste løkke sammenkædes rækkerne valgt fra tabellerne for at opnå rækkerne af det endelige resultat.

Generelt kan sløjfer indlejres et vilkårligt antal gange, afhængigt af antallet af tabeller involveret i joinforbindelsen.

Hvis der udføres en indekssøgning i en eller anden løkke, og alle kolonner i indekset er tilstrækkelige til at opnå det endelige resultat, så udføres der ikke direkte adgang til tabellen i denne løkke.

Fordele

Ulemper

Se også

Links