sql >> Databáze >  >> RDS >> Mysql

Poddotazy s EXISTS vs IN - MySQL

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 stane Null . Takže to musíte zvládnout také. Ale pomocí Exist , je to pouze false . Mnohem snazší se vyrovnat. Jednoduše IN nelze nic srovnávat s Null ale Existuje 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á pozici Count(*) 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í proti IN :když jsou výsledky poddotazu velmi velké.
  • IN dostane před EXISTS :když jsou výsledky poddotazu velmi malé.

Další podrobnosti naleznete na:



  1. Načítání komentářů z PostgreSQL DB

  2. Python psycopg2 se nevkládá do tabulky postgresql

  3. Zábava s kompresí (columnstore) na velmi velkém stole – část 3

  4. Agregační funkce v MySQL – seznam (jako LISTAGG v Oracle)