Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando SELECT dentro de SELECT na consulta mysql


No MySQL, fazer uma subconsulta como essa é uma "consulta correlacionada". Isso significa que os resultados do SELECT externo dependem do resultado do SELECT interno . O resultado é que sua consulta interna é executada uma vez por linha, o que é muito lento.

Você deve refatorar essa consulta; se você junta duas vezes ou usa duas consultas é irrelevante. Juntar-se duas vezes lhe daria:
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', ...)

Para obter mais informações, consulte o manual do MySQL sobre conversão de subconsultas em JOINs .

Dica:EXPLAIN SELECT mostrará como o otimizador planeja lidar com sua consulta. Se você vir DEPENDENT SUBQUERY você deve refatorar, eles são mega lentos.