sql >> Database >  >> RDS >> Oracle

Is een anti-join efficiënter dan een left outer join?

Wanneer u "niet bestaat" of "niet in" gebruikt in uw SQL-query, laat u Oracle samenvoegen anti-join of hash anti-join toegangspaden kiezen.

Snelle uitleg

Bijvoorbeeld, gegeven join tussen tabel A en B (van A join B op A.x =B.x) Oracle haalt alle relevante gegevens op uit tabel A en probeert ze te matchen met overeenkomstige rijen in tabel B, dus het is strikt afhankelijk van de selectiviteit van de tabel Een predikaat.

Bij gebruik van anti-join optimalisatie kan Oracle de tabel met hogere selectiviteit kiezen en matchen met de andere, wat kan resulteren in veel snellere code.

Het kan dat niet doen met gewone join of subquery, omdat het niet kan aannemen dat één overeenkomst tussen tabellen A en B voldoende is om die rij te retourneren.

Verwante hints: HASH_AJ, MERGE_AJ.

Meer:

Dit ziet eruit als een mooi en gedetailleerd artikel over het onderwerp.

Hier is een ander, beter artikel.



  1. java.lang.NullPointerException op com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:3005)

  2. Hoe gegevens terug te krijgen van Mysql voor dagen zonder statistieken?

  3. SQL commando niet juist afgesloten?

  4. PHP - Gegevens formatteren voor in_array