Oracle
 sql >> Database >  >> RDS >> Oracle

Unisci condizioni su più colonne rispetto a un unico join su colonne concatenate?

Penso che la versione con concatenazione sarà praticamente sempre più lenta.

Se una qualsiasi delle colonne che stai confrontando individualmente ha indici, il database sarà normalmente in grado di utilizzare gli indici per ottimizzare il join. Quando confronti le concatenazioni, deve eseguire scansioni complete della tabella, perché il risultato di un calcolo non sarà nell'indice.

E anche se le colonne non sono indicizzate, il database può comunque eseguire i confronti in modo più efficiente. Confronta una coppia di colonne alla volta e può interrompersi non appena uno di questi confronti fallisce. Quando si utilizza la concatenazione, è necessario prima combinare tutte le colonne, in entrambe le righe, quindi eseguire un confronto di stringhe.

Infine, se una qualsiasi delle colonne è numerica, la concatenazione richiederà il passaggio aggiuntivo della conversione del numero in una stringa.