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

Oracle:Löschen von unten nach oben

Da Sie sich für den Algorithmus interessieren, scheint Ihre Frage auf den Unterschied zwischen IN hinauszulaufen und EXISTS da Ihre beiden Beispiele bis auf IN identisch sind zu einem EXISTS ändern in der Löschung aus dem CHILD Tabelle.

Über diesen Unterschied wurde im Laufe der Jahre ziemlich viel geschrieben, aber im Wesentlichen IN wird im Allgemeinen verwendet, wenn die Anzahl der Komparatoren klein ist, während EXISTS ist effizienter für Unterabfragen, die eine größere Anzahl von Komparatoren zurückgeben (insbesondere, wenn diese Werte eine große Anzahl von Duplikaten enthalten).

IN muss jeden zurückgegebenen Komparator auswerten, solange EXISTS ist zufrieden, wenn es auf die erste Übereinstimmung trifft.

Es gibt Ausnahmen davon und wenn Sie danach googeln, werden Sie sie finden, aber im Großen und Ganzen scheint dies zuzutreffen.

Tom Kyte (Oracle VP) hat hier eine sehr gute Antwort mit Erläuterungen:http://asktom.oracle.com/pls/asktom/f?p=100:11:2148775836129778::::P11_QUESTION_ID:953229842074

TechRepublic hat hier auch eine gute Erklärung:http://www.techrepublic.com/article/oracle-tip-understand-the-difference-between-in-and-exists-in-subqueries/5297080

Hoffe das hilft...