¿Existen reglas básicas para que los desarrolladores utilicen join en lugar de subconsulta o son lo mismo?Únase a la consulta o subconsulta
Respuesta
Depende de RDBMS. Debe comparar los planes de ejecución para ambas consultas.
En mi experiencia con Oracle 10 y 11, los planes de ejecución son siempre los mismos.
Teóricamente cada subconsulta puede cambiarse a una consulta de unión.
En cuanto a rendimiento, no tienen ninguna diferencia en la mayoría de los motores DB modernos.
El problema con las subconsultas es que puede terminar teniendo un sub-conjunto de resultados sin ninguna clave, por lo que unirlas sería más costoso.
Si es posible, siempre intente realizar consultas JOIN y filtrar con la cláusula ON, en lugar de WHERE (aunque debería ser el mismo, ya que los motores modernos están optimizados para esto).
Como con muchas cosas, depende. - cuán compleja es la subconsulta - en una consulta con qué frecuencia se ejecuta la subconsulta
Intento evitar las subconsultas siempre que puedo. Especialmente cuando se esperan conjuntos de resultados grandes nunca se utilizan subconsultas, en caso de que la subconsulta se ejecute para cada elemento del conjunto de resultados.
cuidar, Alex
En SQL Server una consulta correlacionada normalmente realiza peor que una unión o, a menudo incluso mejor para un rendimiento, una combinación de una tabla derivada. Casi nunca escribo una subconsulta para nada que tenga que realizarse varias veces. Esto se debe a que las subconsultas correlacionadas a menudo básicamente convierten su consulta en un cursor y ejecutan una fila a la vez. En las bases de datos, generalmente es mejor hacer las cosas en forma de conjunto
Vamos a ignorar el impacto en el rendimiento por ahora (como deberíamos si somos conscientes de que "la optimización prematura es la raíz de todo mal").
elegir lo que se ve más claro y más fácil de mantener.
El primer principio es el "estado de la consulta con precisión". El segundo principio es "declarar la consulta simple y obviamente" (que es donde generalmente se toman decisiones). El tercero es "declarar la consulta, por lo que se procesará de manera eficiente".
Si se trata de un dbms con un buen procesador de consultas, los diseños de consultas equivalentes deberían dar como resultado planes de consulta que son iguales (o al menos igualmente eficientes).
Mi mayor frustración con el uso de MySQL por primera vez fue lo consciente que tenía que ser para anticipar el optimizador. Después de una larga experiencia con Oracle, SQL Server, Informix y otros productos dbms, rara vez esperaba preocuparme por esos problemas. Ahora es mejor con versiones más nuevas de MySQL, pero todavía es algo a lo que termino necesitando prestar atención más a menudo que con los demás.
- 1. ¿Qué es más rápido: ÚNASE con GROUP BY o una subconsulta?
- 2. Insertar subconsulta en Seleccionar consulta
- 3. QueryOver O con subconsulta
- 4. ÚNASE muy lento al usar DERECHA UNIRSE en esta consulta
- 5. MySQL ÚNASE a la fila más reciente solamente?
- 6. SQL complicado Únase
- 7. Convertir consulta SQL (con subconsulta correlacionada) a LINQ en C#
- 8. Exterior Únase a la asignación de ORM en SQLAlchemy
- 9. ¿Cómo puedo acelerar mi consulta? la subconsulta es demasiado lenta
- 10. ¿Cómo realizo la consulta de actualización con subconsulta en Access?
- 11. subconsulta en una expresión lambda o LINQ
- 12. La consulta MySQL con subconsulta dependiente lleva demasiado tiempo
- 13. Seleccionar * de la subconsulta
- 14. MongoDB - simular unión o subconsulta
- 15. Estrechando el resultado de la consulta por subconsulta
- 16. Únase entre dos campos no clave
- 17. LINQ Únase con varias condiciones en la cláusula On
- 18. bit a bit-o agregado en una subconsulta
- 19. Hacer referencia a las tablas de la consulta externa en una subconsulta
- 20. ¿Por qué la siguiente consulta de linq a SQL generó una subconsulta?
- 21. Necesita ayuda para generar una consulta + subconsulta de SQLAlchemy
- 22. Zend_Db subconsulta
- 23. Rendimiento de consulta WHERE cláusula contiene IN (subconsulta)
- 24. ¿Por qué EF genera una subconsulta para una consulta simle?
- 25. Agrupar por en subconsulta y consulta básica Servidor sql
- 26. consulta con subconsulta recuento, combinación interna y el grupo
- 27. Subconsulta de MySQL con variable de datos de consulta principal
- 28. Columna de consulta padre de referencia en subconsulta (Oracle)
- 29. Consulta de Linq con subconsulta como valores separados por comas
- 30. Zend_Db_Table subconsulta
¿Eso es cierto para las subconsultas correlacionadas? ¿Por qué calificas con "teóricamente"? ¿Puedes completar tu respuesta a la pregunta? – dkretz