Mysql
 sql >> Database >  >> RDS >> Mysql

Utilizzo di SELECT all'interno di SELECT nella query mysql

In MySQL, eseguire una sottoquery come questa è una "query correlata". Ciò significa che i risultati dell'esterno SELECT dipendono dal risultato del SELECT interno . Il risultato è che la tua query interna viene eseguita una volta per riga, il che è molto lento.

Dovresti rifattorizzare questa query; se ti unisci due volte o usi due query è per lo più irrilevante. Partecipare due volte ti darebbe:

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

Per ulteriori informazioni, vedere il manuale MySQL su conversione di subquery in JOIN .

Suggerimento:EXPLAIN SELECT ti mostrerà come l'ottimizzatore prevede di gestire la tua query. Se vedi DEPENDENT SUBQUERY dovresti refactoring, questi sono molto lenti.