sql >> Databasteknik >  >> RDS >> Oracle

Är en antifog mer effektiv än en vänster ytterskarv?

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.



  1. Oracle PL/SQL:Kontrollera om BLOB eller CLOB är tom

  2. Hur kontrollerar jag om ett index finns på ett tabellfält i MySQL?

  3. Sammanfoga flera rader i SQL

  4. MySQL uppdateras inte efter att ha anropat connection.commit() med Flask (FUNGERAR)