sql >> Databasteknik >  >> RDS >> Mysql

Använder SELECT i SELECT i mysql-frågan

I MySQL är att göra en subquery som denna en "korrelerad fråga". Detta innebär att resultaten av den yttre SELECT beror på resultatet av den inre SELECT . Resultatet är att din inre fråga exekveras en gång per rad, vilket är mycket långsamt.

Du bör refaktorera den här frågan; om du går med två gånger eller använder två frågor är för det mesta irrelevant. Att gå med två gånger skulle ge dig:

SELECT something
FROM posts
INNER JOIN tag_map ON tag_map.id = posts.id
INNER JOIN tags ON tags.tag_id = tag_map.tag_id
WHERE tags.tag IN ('tag1', ...)

För mer information, se MySQL-manualen om att konvertera delfrågor till JOINs .

Tips:EXPLAIN SELECT kommer att visa dig hur optimeraren planerar att hantera din fråga. Om du ser DEPENDENT SUBQUERY du bör refaktorera, dessa är mega-långsamma.



  1. ORA-24247 när du skickar via FTP

  2. MySQL Gå med baserat på YEAR () indexering - Kolumntillägg eller Genererad kolumn

  3. mysql arbetsbänk, ersätt kolumn från fil

  4. Hur kan jag skapa en funktion för att returnera en begränsnings kolumnnamn?