Plan wyjaśnień
pokazałby ci, dlaczego dokładnie powinieneś użyć Exists . Zwykle pytanie brzmi Istnieje vs. Count(*) . Istnieje jest szybszy. Dlaczego?
-
W odniesieniu do wyzwań obecnych przez NULL:gdy podzapytanie zwraca
Null, dla IN całe zapytanie staje sięNull. Więc musisz sobie z tym poradzić. Ale używającExist, to tylkofałsz. Dużo łatwiej sobie poradzić. Po prostuINnie można niczego porównać zNullaleIstniejemoże. -
np.
Istnieje (wybierz * ze swojej tabeli, gdzie bla ='blabla');Prawda/fałsz otrzymujesz w momencie znalezienia/dopasowania jednego trafienia . -
W tym przypadku
INrodzaj zajmuje pozycjęCount(*)aby wybrać WSZYSTKIE pasujące wiersze na podstawieGDZIEponieważ porównuje wszystkie wartości.
Ale nie zapomnij też o tym:
ISTNIEJEwykonuje z dużą szybkością naIN:gdy wyniki podzapytania są bardzo duże.WwyprzedzaEXISTS:gdy wynik podzapytania jest bardzo mały.
Więcej informacji na ten temat: