Ponieważ interesuje Cię algorytm, Twoje pytanie wydaje się sprowadzać do różnicy między IN
i EXISTS
ponieważ twoje dwa przykłady są takie same, zapisz dla IN
zmiana na EXISTS
w usuwaniu z CHILD
tabeli.
Przez lata napisano o tej różnicy całkiem sporo, ale w istocie IN
jest zwykle używany tam, gdzie liczba komparatorów jest niewielka, podczas gdy EXISTS
jest bardziej wydajny w przypadku podzapytań zwracających większą liczbę komparatorów (zwłaszcza jeśli te wartości zawierają dużą liczbę duplikatów).
IN
musi ocenić każdy zwrócony komparator, podczas gdy EXISTS
jest usatysfakcjonowany, gdy napotka pierwszy mecz.
Są od tego wyjątki i jeśli wyszukasz je w Google, znajdziesz je, ale ogólnie rzecz biorąc, wydaje się to być prawdą.
Tom Kyte (Wiceprezes Oracle) ma bardzo dobrą odpowiedź z wyjaśnieniami tutaj:http://asktom.oracle.com/pls/asktom/f?p=100:11:2148775836129778::::P11_QUESTION_ID:953229842074
TechRepublic ma również dobre wyjaśnienie tutaj:http://www.techrepublic.com/article/oracle-tip-understand-the-difference-between-in-and-exists-in-subqueries/529780
Mam nadzieję, że to pomoże...