När du använder "existerar inte" eller "inte i" i din SQL-fråga låter du Oracle välja merge anti-join eller hash anti-join åtkomstvägar.
Snabb förklaring
Till exempel, givet koppling mellan tabell A och B (från A koppling B till A.x =B.x) kommer Oracle att hämta all relevant data från tabell A och försöka matcha dem med motsvarande rader i tabell B, så det är strikt beroende av tabellens selektivitet Ett predikat.
När du använder anti-join-optimering kan Oracle välja tabellen med högre selektivitet och matcha den med den andra, vilket kan resultera i mycket snabbare kod.
Det kan inte göra det med vanlig join eller subquery, eftersom det inte kan anta att en matchning mellan tabell A och B räcker för att returnera den raden.
Relaterade tips: HASH_AJ, MERGE_AJ.
Mer:
Detta ser ut som en trevlig och detaljerad artikel i ämnet.
Här är en annan, mer anständig artikel.