Een Explain Plan
zou je hebben laten zien waarom je precies Exists
. zou moeten gebruiken . Meestal komt de vraag Exists vs Count(*)
. Exists
is sneller. Waarom?
-
Met betrekking tot uitdagingen aanwezig door NULL:wanneer subquery
Null
retourneert , voor IN wordt de hele zoekopdrachtNull
. Daar moet je dus ook mee om kunnen gaan. Maar metExist
, het is slechts eenfalse
. Veel gemakkelijker om mee om te gaan. GewoonIN
kan niets vergelijken metNull
maarExists
kan. -
bijv.
Exists (Select * from yourtable where bla = 'blabla');
je krijgt waar/onwaar op het moment dat één treffer is gevonden/overeenkomt . -
In dit geval
IN
neemt min of meer de positie in van deCount(*)
om ALLE te selecteren overeenkomende rijen op basis van deWHERE
omdat het alle waarden vergelijkt.
Maar vergeet dit ook niet:
EXISTS
voert met hoge snelheid uit tegenIN
:wanneer de resultaten van de subquery erg groot zijn.IN
loopt voor opEXISTS
:wanneer de resultaten van de subquery erg klein zijn.
Verwijzing naar voor meer details: