Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwenden von SELECT innerhalb von SELECT in einer MySQL-Abfrage

In MySQL ist eine solche Unterabfrage eine "korrelierte Abfrage". Das bedeutet, dass die Ergebnisse des äußeren SELECT hängen vom Ergebnis des inneren SELECT ab . Das Ergebnis ist, dass Ihre innere Abfrage einmal pro Zeile ausgeführt wird, was sehr langsam ist.

Sie sollten diese Abfrage umgestalten; ob Sie zweimal beitreten oder zwei Abfragen verwenden, ist meistens irrelevant. Wenn Sie zweimal beitreten, erhalten Sie:

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', ...)

Weitere Informationen finden Sie im MySQL-Handbuch zum Konvertieren von Unterabfragen in JOINs .

Tipp:EXPLAIN SELECT zeigt Ihnen, wie der Optimierer Ihre Abfrage handhaben will. Wenn Sie DEPENDENT SUBQUERY sehen Sie sollten umgestalten, diese sind mega-langsam.