Ok, así que me doy cuenta de que esta es una pregunta bastante vaga, pero tengan paciencia conmigo.¿Por qué una combinación de SQL elige un plan de consulta subóptimo?
He experimentado este problema en numerosas ocasiones con consultas diferentes y no relacionadas. La consulta siguiente toma muchos minutos para ejecutar:
SELECT <Fields>
FROM <Multiple Tables Joined>
LEFT JOIN (SELECT <Fields> FROM <Multiple Tables Joined>) ON <Condition>
Sin embargo, con sólo añadir la sugerencia de combinación que consultar los ejecuta en cuestión de segundos:
SELECT <Fields>
FROM <Multiple Tables Joined>
LEFT HASH JOIN (SELECT <Fields> FROM <Multiple Tables Joined>) ON <Condition>
Lo más curioso es el tipo de unión se especifica en el La sugerencia no es realmente lo que mejora el rendimiento. Parece ser porque la sugerencia hace que el optimizador ejecute la consulta secundaria aisladamente y luego se una. Veo la misma mejora de rendimiento si creo una función de valor de tabla (no una en línea) para la subconsulta. p.ej.
SELECT <Fields>
FROM <Multiple Tables Joined>
LEFT JOIN dbo.MySubQueryFunction() ON <Condition>
¿Alguien tiene alguna idea de por qué el optimizador es tan tonto en este caso?
¿Qué versión de SQL Server estás usando? – Austin
He tenido el problema tanto en 2005 como en 2008 –