sql >> Database >  >> RDS >> Mysql

Voert de MySQL IN-component de subquery meerdere keren uit?

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.



  1. Verwijder alle spaties uit een string in SQL Server

  2. IntegrityError:(1062, dubbele invoer voor sleutel)

  3. Trigger vs. controlebeperking

  4. Verschil tussen codering en sortering?