sql >> Databasteknik >  >> RDS >> Mysql

Exekverar MySQL IN-satsen underfrågan flera gånger?

Ditt antagande är falskt; underfrågan kommer endast att köras en gång. Anledningen till att det är långsammare än en join är att IN kan inte dra fördel av index; den måste skanna sina argument en gång för varje gång WHERE klausul utvärderas, det vill säga en gång per rad i tabellA. Du kan optimera frågan, utan att använda variabler eller lagrade procedurer, helt enkelt genom att ersätta IN med en join, alltså:

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

Om du inte har något emot att få tillbaka alla fält från båda tabellerna, måste du räkna upp de fält du vill ha i SELECT klausul; tableA.* , till exempel, kommer att framkalla ett syntaxfel.



  1. Yii2 - vänster koppling på flera villkor

  2. Hur man visar MySQL-processer

  3. Hur många kolumner i MySQL-tabellen

  4. linq till entitet:linq query prestandaoptimering