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

¿Cuál es más rápido:subconsultas correlacionadas o unión?

Primero, una subconsulta correlacionada es realmente un tipo de unión. No existe una regla de oro sobre cuál produce el mejor plan de ejecución. Si está interesado en el rendimiento, debe probar las diferentes formas para ver cuál funciona mejor. O, al menos, mirar los planes de ejecución para tomar esa decisión.

En general, tiendo a evitar las subconsultas correlacionadas por un par de razones. Primero, casi siempre se pueden escribir sin la correlación. En segundo lugar, muchos motores de consulta los convierten en uniones de bucle anidado (aunque usan índices), y otras estrategias de unión podrían ser mejores. En tales casos, las subconsultas correlacionadas dificultan la paralelización de la consulta. En tercer lugar, las subconsultas correlacionadas suelen estar en las cláusulas SELECT o WHERE. Me gusta que todas mis tablas estén en la cláusula FROM.

Sin embargo, en MySQL, las subconsultas correlacionadas suelen ser las más manera eficiente de hacer una consulta. Esto es especialmente cierto cuando se usa una subconsulta en un IN cláusula. Entonces, no hay una regla de oro.