Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Ist ein Anti-Join effizienter als ein Left Outer Join?

Wenn Sie in Ihrer SQL-Abfrage „nicht vorhanden“ oder „nicht in“ verwenden, überlassen Sie Oracle die Auswahl von Merge-Anti-Join- oder Hash-Anti-Join-Zugriffspfaden.

Kurze Erklärung

Bei einer gegebenen Verknüpfung zwischen Tabelle A und B (von A Join B auf A.x =B.x) ruft Oracle beispielsweise alle relevanten Daten aus Tabelle A ab und versucht, sie mit den entsprechenden Zeilen in Tabelle B abzugleichen, sodass dies streng von der Selektivität der Tabelle abhängt Ein Prädikat.

Bei Verwendung der Anti-Join-Optimierung kann Oracle die Tabelle mit höherer Selektivität auswählen und mit der anderen abgleichen, was zu viel schnellerem Code führen kann.

Dies ist mit einem regulären Join oder einer Unterabfrage nicht möglich, da nicht davon ausgegangen werden kann, dass eine Übereinstimmung zwischen den Tabellen A und B ausreicht, um diese Zeile zurückzugeben.

Verwandte Hinweise: HASH_AJ, MERGE_AJ.

Mehr:

Dies sieht nach einem netten und ausführlichen Artikel zu diesem Thema aus.

Hier ist ein weiterer, dezenterer Artikel.