Solo necesito confirmar que entiendo algo correctamente:
Recientemente vi una pregunta SO en la que un usuario publicó una respuesta en Linq como:
from p in db.table where p.column.AddMinutes(1) > DateTime.Now select p
Para aquellos que no están familiarizados con Linq, esperaría que el resultado de esa declaración (no probada con justicia) sea:
SELECT *
FROM table t
WHERE DATEADD(min, 1, t.column) >= GETDATE()
Publiqué una respuesta a esto diciendo que la manipulación de fecha y hora debería estar en la variable (en este caso GETDATE()
), de modo que la declaración debería reflejar algo como:
SELECT *
FROM table t
WHERE t.column >= DATEADD(min, -1, GETDATE())
En mi respuesta, los bits de los que ahora no estoy seguro suponen lo siguiente:
- Los índices no se utilizarán debido a la manipulación de la columna.
- Los planes de consulta serán diferentes en parte debido a lo anterior (no probado, suponiendo que sí)
- Debido a lo anterior, la primera consulta en realidad funcionará peor que la segunda.
Mi pregunta:
¿Me he perdido algo en mi razonamiento? ¿Estoy en lo correcto? Por último, ¿algún organismo tiene buenos artículos sobre SARGability?