sql >> Databasteknik >  >> RDS >> Oracle

Oracle:Radering nedifrån och upp

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...




  1. Hur ansluter jag mysql-databas och infogar data i den med Android-kod

  2. if-sats med sträng som innehåller villkoret

  3. Hur man returnerar poster i rätt ordning i PostgreSQL

  4. Golang MySQL frågar efter odefinierad mängd args med IN-operatorn