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

proč sql s 'exists' běží pomaleji než 'in' pomocí MySQL

Myslím, že máte trochu zmatek, máte špatnou představu, „EXISTS“ funguje rychleji než „IN“ a já se snažím, abyste pochopili důvod..

EXISTS vrátí boolean a vrátí boolean při první shodě. Takže pokud máte co do činění s duplikáty/násobky, 'EXISTS' bude rychlejší k provedení než 'IN' nebo 'JOIN' v závislosti na datech a potřebách.

Zatímco „IN“ je syntaktický cukr pro klauzule OR. I když je to velmi vstřícné, existují problémy se zpracováním mnoha hodnot pro toto srovnání (severně od 1 000). V případě duplikátů/násobků 'IN' kontroluje všechny existující hodnoty, což přirozeně spotřebuje více času na provedení než 'EXISTUJE', proto je 'IN' vždy poměrně pomalejší než 'EXISTS'.

Doufám, že jsem objasnil váš zmatek.



  1. Vraťte seznam databází v SQLite

  2. připojit klauzulí v regex_substr

  3. SQL vs MySQL:Pravidla pro agregační operace a GROUP BY

  4. Jak funguje Tan() v PostgreSQL