En Forklar plan
ville have vist dig, hvorfor netop du skulle bruge Exists
. Normalt kommer spørgsmålet Exists vs Count(*)
. Eksisterer
er hurtigere. Hvorfor?
-
Med hensyn til udfordringer præsenteret af NULL:når underforespørgsel returnerer
Null
, for IN bliver hele forespørgslenNull
. Så det skal du også klare. Men ved at brugeExist
, det er blot enfalsk
. Meget nemmere at klare. SimpelthenIN
kan ikke sammenligne noget medNull
menEksisterer
kan. -
for eksempel.
Eksisterer (Vælg * fra din tabel, hvor bla ='blabla');
du får sand/falsk i det øjeblik, et hit er fundet/matchet . -
I dette tilfælde
IN
tager på en måde positionen forCount(*)
for at vælge ALLE matchende rækker baseret påWHERE
fordi det sammenligner alle værdier.
Men glem heller ikke dette:
FINDER
udføres med høj hastighed modIN
:når underforespørgselsresultaterne er meget store.IN
kommer foranEXISTS
:når underforespørgselsresultaterne er meget små.
Reference til for flere detaljer:
- underforespørgsel ved hjælp af IN .
- IN - underforespørgselsoptimering
- Deltag vs. underforespørgsel .