Uw veronderstelling is onjuist; de subquery wordt slechts één keer uitgevoerd. De reden waarom het langzamer is dan een join is omdat IN
kan geen gebruik maken van indexen; het moet zijn argumenten één keer scannen voor elke keer dat de WHERE
clausule wordt geëvalueerd, dat wil zeggen één keer per rij in tabelA. U kunt de query optimaliseren, zonder gebruik te maken van variabelen of opgeslagen procedures, door simpelweg de IN
. te vervangen met een join, dus:
SELECT tableA.field1, tableA.field2, [...]
FROM tableA
INNER JOIN tableB ON tableA.id = tableB.id
Tenzij u het niet erg vindt om elk veld uit beide tabellen terug te krijgen, moet u de gewenste velden opsommen in de SELECT
clausule; tableA.*
, zal bijvoorbeeld een syntaxisfout uitlokken.