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.