sql >> Base de Datos >  >> RDS >> Mysql

Usando SELECT dentro de SELECT en la consulta mysql

En MySQL, hacer una subconsulta como esta es una "consulta correlacionada". Esto significa que los resultados del SELECT externo dependen del resultado del SELECT interno . El resultado es que su consulta interna se ejecuta una vez por fila, lo cual es muy lento.

Debe refactorizar esta consulta; ya sea que se una dos veces o use dos consultas, es en su mayoría irrelevante. Unirse dos veces le daría:

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 obtener más información, consulte el manual de MySQL sobre conversión de subconsultas a JOIN .

Sugerencia:EXPLAIN SELECT le mostrará cómo el optimizador planea manejar su consulta. Si ve DEPENDENT SUBQUERY deberías refactorizar, estos son mega-lentos.