Hay algunas explicaciones posibles de por qué ve este comportamiento. Algunos comunes son
- Es posible que la subconsulta o CTE se esté reevaluando repetidamente.
- Materialización de resultados parciales en un
#temp
table puede forzar un orden de combinación más óptimo para esa parte del plan al eliminar algunas opciones posibles de la ecuación. - Materialización de resultados parciales en un
#temp
table puede mejorar el resto del plan al corregir las estimaciones de cardinalidad deficientes.
El método más confiable es simplemente usar un #temp
mesa y materialízalo tú mismo.
De lo contrario, con respecto al punto 1, consulte Proporcionar una pista para forzar la materialización intermedia de CTE o tablas derivadas
. El uso de TOP(large_number) ... ORDER BY
a menudo puede animar a que el resultado se ponga en cola en lugar de reevaluarlo repetidamente.
Incluso si eso funciona, no hay estadísticas en el spool.
Para los puntos 2 y 3 necesitarías analizar por qué no estabas obteniendo el plan deseado. Posiblemente, reescribir la consulta para usar predicados sargable o actualizar las estadísticas podría obtener un mejor plan. De lo contrario, puede intentar usar sugerencias de consulta para obtener el plan deseado.