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šeINnelze nic srovnávat sNullaleExistujemůž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ě
INzaujímá poziciCount(*)vyberte VŠE odpovídající řádky na základěWHEREprotože srovnává všechny hodnoty.
Nezapomeňte však ani na toto:
EXISTUJEspouští se vysokou rychlostí protiIN:když jsou výsledky poddotazu velmi velké.INdostane předEXISTS:když jsou výsledky poddotazu velmi malé.
Další podrobnosti naleznete na: