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

Un anti-join è più efficiente di un join esterno sinistro?

Quando usi "non esiste" o "non in" nella tua query SQL, consenti a Oracle di scegliere percorsi di accesso anti-unione o hash anti-unione.

Spiegazione rapida

Ad esempio, dato unisci tra le tabelle A e B (da A unisci B su A.x =B.x) Oracle preleverà tutti i dati rilevanti dalla tabella A e proverà ad abbinarli alle righe corrispondenti nella tabella B, quindi è strettamente dipendente dalla selettività della tabella Un predicato.

Quando si utilizza l'ottimizzazione anti-join, Oracle può scegliere la tabella con una selettività più elevata e abbinarla all'altra, il che potrebbe comportare un codice molto più veloce.

Non può farlo con join o sottoquery regolari, perché non può presumere che una corrispondenza tra le tabelle A e B sia sufficiente per restituire quella riga.

Suggerimenti correlati: HASH_AJ, MERGE_AJ.

Altro:

Questo sembra un articolo carino e dettagliato sull'argomento.

Qui è un altro articolo più denso.