Il nested loop join (NLJ), o simple nested loop join, è un algoritmo di join che unisce due set usando due cicli nidificati. Una delle due relazioni viene designata come esterna e l'altra interna.
Questo algoritmo legge righe dalla prima tabella una per volta in un ciclo, passando ogni riga al ciclo nidificato che elabora la tabella successiva nel join. Questo processo viene ripetuto per ogni tabella coinvolta nel join.
Supponendo R esterna e S interna l'algoritmo per ogni tupla di R, che verifica le eventuali altre condizioni su R, accede a S ricercando tutte le tuple di S che soddisfano tutte le eventuali altre condizioni su S e che possono concatenarsi con le tuple di R.
Possiamo schematizzare questo comportamento con
For each tuple r in R do
For each tuple s in S do
If r and s satisfy the join condition
Then output the tuple <r,s>
Valutazione dei costi
Dato che l'algoritmo NLJ passa le righe dal ciclo esterno a quello interno una alla volta, tipicamente le tabelle elaborate nel ciclo più interno vengono lette molte volte.
Il costo di esecuzione è espresso come:
- C(R) + TR x C(S)
dove:
- C(R) è il costo di accesso a R
- TR è il numero atteso di tuple residue di R
- C(S) è il costo di accesso a S
Varianti
Esiste un algoritmo di join, chiamato block nested loop join, che si differenzia da quello di nested-loop poiché i dati vengono salvati in memoria per ridurre il numero di volte che S viene scansionata.
Bibliografia