Tengo una consulta como esta:
SELECT col1
FROM MyTable
WHERE
DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
BETWEEN col2
AND col3
;
Esto proporciona información sobre el plan de ejecución similar a esto:
¿Se dateadd
ejecuta la parte de los predicados de búsqueda para cada fila de la consulta? ¿O SQL Server calcula el valor una vez para toda la consulta?
fuente
GETDATE()
.Los planes de ejecución son geniales, pero a veces simplemente no te dicen la verdad. Así que aquí hay una prueba basada en la prueba de rendimiento.
(y el resultado final: la expresión no se evalúa para cada fila)
Esta es la consulta OP y tarda unos 12 segundos en ejecutarse
Esta consulta que almacena la fecha en un parámetro antes de la ejecución, toma aproximadamente el mismo tiempo, 12 segundos.
Y solo para verificar los resultados:
esta consulta que realiza el cálculo en col1 y, por lo tanto, tiene que volver a calcular la expresión para cada fila, tarda aproximadamente 30 segundos en ejecutarse.
Todas las consultas se ejecutaron repetidamente mostrando las mismas métricas
fuente