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. SimpelthenINkan ikke sammenligne noget medNullmenEksistererkan. -
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
INtager på en måde positionen forCount(*)for at vælge ALLE matchende rækker baseret påWHEREfordi det sammenligner alle værdier.
Men glem heller ikke dette:
FINDERudføres med høj hastighed modIN:når underforespørgselsresultaterne er meget store.INkommer 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 .