Eftersom du är intresserad av algoritmen, vad din fråga verkar koka ner till är skillnaden mellan IN
och EXISTS
eftersom dina två exempel är samma sparade för IN
ändra till en EXISTS
i raderingen från CHILD
bord.
Det har skrivits ganska mycket om denna skillnad genom åren men i huvudsak IN
används vanligtvis där antalet komparatorer är litet medan EXISTS
är mer effektivt för delfrågor som returnerar ett större antal komparatorer (särskilt om dessa värden innehåller ett stort antal dubbletter).
IN
måste utvärdera varje returnerad komparator medan EXISTS
är nöjd när den stöter på den första matchen.
Det finns undantag från detta och om du googlar efter dem så kommer du att hitta dem men på det hela taget verkar detta stämma.
Tom Kyte (Oracle VP) har ett mycket bra svar med förklaringar här:http://asktom.oracle.com/pls/asktom/f?p=100:11:2148775836129778::::P11_QUESTION_ID:953229842074
TechRepublic har också en bra förklaring här:http://www.techrepublic.com/article/oracle-tip-understand-the-difference-between-in-and-exists-in-subqueries/5297080
Hoppas detta hjälper...