Ein Explain Plan
hätte Ihnen gezeigt, warum genau Sie Exists
verwenden sollten . Normalerweise kommt die Frage Exists vs Count(*)
. Exists
ist schneller. Warum?
-
In Bezug auf Herausforderungen durch NULL:wenn subquery
Null
zurückgibt , für IN wird die gesamte Abfrage zuNull
. Also musst du auch damit umgehen. Aber mitExist
, es ist lediglich einfalse
. Viel einfacher zu bewältigen. EinfachIN
kann nichts mitNull
vergleichen aberExists
kann. -
z.B.
Exists (Select * from yourtable where bla = 'blabla');
Sie erhalten wahr/falsch in dem Moment, in dem ein Treffer gefunden/zugeordnet wird . -
In diesem Fall
IN
nimmt quasi die Position desCount(*)
ein um ALLE auszuwählen übereinstimmende Zeilen basierend aufWHERE
weil es alle Werte vergleicht.
Aber vergiss auch das nicht:
EXISTS
wird mit hoher Geschwindigkeit gegenIN
ausgeführt :wenn die Ergebnisse der Unterabfrage sehr groß sind.IN
geht vorEXISTS
:wenn die Ergebnisse der Unterabfrage sehr klein sind.
Weitere Informationen finden Sie unter: