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

Qual é mais rápido:subconsultas correlacionadas ou junção?


Primeiro, uma subconsulta correlacionada é realmente um tipo de junção. Não existe uma regra de ouro sobre qual produz o melhor plano de execução. Se você está interessado em desempenho, precisa experimentar as diferentes formas para ver o que funciona melhor. Ou, pelo menos, veja os planos de execução para tomar essa decisão.

Em geral, costumo evitar subconsultas correlacionadas por alguns motivos. Primeiro, eles quase sempre podem ser escritos sem a correlação. Em segundo lugar, muitos mecanismos de consulta os transformam em junções de loop aninhadas (embora usando índices), e outras estratégias de junção podem ser melhores. Nesses casos, as subconsultas correlacionadas dificultam a paralelização da consulta. Terceiro, as subconsultas correlacionadas geralmente estão nas cláusulas SELECT ou WHERE. Eu gosto que todas as minhas tabelas estejam na cláusula FROM.

No MySQL, no entanto, as subconsultas correlacionadas são geralmente as mais maneira eficiente de fazer uma consulta. Isso é especialmente verdadeiro ao usar uma subconsulta em um IN cláusula. Portanto, não existe uma regra de ouro.