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

Spouští klauzule MySQL IN poddotaz vícekrát?

Váš předpoklad je mylný; poddotaz bude proveden pouze jednou. Důvod, proč je pomalejší než spojení, je, že IN nemůže využívat výhody indexů; musí prohledat své argumenty jednou při každém WHERE klauzule se vyhodnocuje, to znamená jednou na řádek v tabulce A. Dotaz můžete optimalizovat bez použití proměnných nebo uložených procedur, jednoduše nahrazením IN se spojením, tedy:

SELECT tableA.field1, tableA.field2, [...]
FROM tableA 
  INNER JOIN tableB ON tableA.id = tableB.id

Pokud vám nevadí získat zpět všechna pole z obou tabulek, musíte pole, která chcete, vyjmenovat v SELECT doložka; tableA.* , například vyvolá chybu syntaxe.



  1. Jak donutím Postgres, aby používal konkrétní index?

  2. Jak opravit chybu Msg 7325 na serveru SQL Server:„Objekty odhalující sloupce s typy CLR nejsou povoleny v distribuovaných dotazech“

  3. Jak funguje fulltextové vyhledávání MySQL?

  4. Jak vytvořit funkci PL/SQL v databázi Oracle