El gasto está utilizando la función DateAdd no solo en SELECT, sino también en WHERE; O usando la Sub Consulta que inicialmente devuelve más datos de los que necesito, pero luego se puede filtrar sin usar la función DateAdd nuevamente en la base de datos.Eficiencia SQL - Consulta utilizando la función fechaAdd dos veces; o SubQuery y DateAdd Function una vez; en la fecha ENTRE
El plan de ejecución parece implicar que son idénticos en lo que a ella respecta. Me pregunto, ¿cuál sería más eficiente?
DECLARE @DateFrom DateTime
SET @DateFrom = '2011-05-27'
DECLARE @DateTo DateTime
SET @DateTo = '2011-06-27'
SELECT id, name,
dateAdd(hour, datediff(hour, getdate(), getutcdate()), --UTC offset
dateadd(second, itsm_requiredbyx, '1/1/1970 12:00 AM')) as itsm_requiredbyx
FROM tablename
WHERE dateAdd(hour, datediff(hour, getdate(), getutcdate()), --UTC offset
dateadd(second, itsm_requiredbyx, '1/1/1970 12:00 AM'))
BETWEEN @DateFrom AND @DateTo
ORDER BY itsm_requiredbyx desc
---------------------------------------------------------------------------------------------
SELECT *
FROM
(
select id, name,
dateAdd(hour, datediff(hour, getdate(), getutcdate()), --UTC offset
dateadd(second, itsm_requiredbyx, '1/1/1970 12:00 AM')) as itsm_requiredbyx
from tablename
) RR
WHERE itsm_requiredbyx BETWEEN @DateFrom AND @DateTo
ORDER BY itsm_requiredbyx desc
No creo que importe. Pero ve que está haciendo cálculos para el campo 'itsm_requiredbyx' y luego verifica si el resultado está entre dos valores externos,' @ DateFrom' y '@ DateTo'.Si no hace ningún cálculo en el campo, pero realiza los cálculos (invertidos) a los valores externos en su lugar y luego verifica si 'itsm_requiredbyx' está entre estos dos valores calculados, la consulta puede usar el índice de' itsm_requiredbyx'. –
Sintaxis corregida, gracias. –
Hay configuraciones regionales con un desplazamiento de UTC que no es un número entero de horas. Como pareces estar tratando de escribir un código internacional, es posible que tengas que ser consciente de eso. –