Vysvětlení plánu
by vám ukázal, proč přesně byste měli používat Exists
. Obvykle přichází otázka Existuje vs Počet(*)
. Existuje
je rychlejší. Proč?
-
S ohledem na výzvy prezentované NULL:když poddotaz vrátí
Null
, pro IN se celý dotaz staneNull
. Takže to musíte zvládnout také. Ale pomocíExist
, je to pouzefalse
. Mnohem snazší se vyrovnat. JednodušeIN
nelze nic srovnávat sNull
aleExistuje
může. -
např.
Existuje (vyberte * z vaší tabulky, kde bla ='blabla');
ve chvíli, kdy je nalezen/porovnán jeden zásah, získáte hodnotu true/false . -
V tomto případě
IN
zaujímá poziciCount(*)
vyberte VŠE odpovídající řádky na základěWHERE
protože srovnává všechny hodnoty.
Nezapomeňte však ani na toto:
EXISTUJE
spouští se vysokou rychlostí protiIN
:když jsou výsledky poddotazu velmi velké.IN
dostane předEXISTS
:když jsou výsledky poddotazu velmi malé.
Další podrobnosti naleznete na: