나는 무언가를 올바르게 이해하고 있음을 확인해야합니다.
최근에 사용자가 Linq에 다음과 같은 답변을 게시 한 SO 질문을 보았습니다.
from p in db.table where p.column.AddMinutes(1) > DateTime.Now select p
Linq에 익숙하지 않은 사람들에게는 그 진술의 결과 (공평하게 테스트되지 않음)가 다음과 같을 것으로 기대합니다.
SELECT *
FROM table t
WHERE DATEADD(min, 1, t.column) >= GETDATE()
나는 날짜 시간 조작이 변수 (이 경우 GETDATE()
)에 있어야한다는 사실 에 대한 답변을 게시 했으므로 실제로 진술은 다음과 같이 반영되어야합니다.
SELECT *
FROM table t
WHERE t.column >= DATEADD(min, -1, GETDATE())
내 대답에서, 내가 확신하지 못하는 비트는 다음을 가정합니다.
- 컬럼 조작으로 인해 인덱스가 사용되지 않습니다
- 위의 이유로 인해 쿼리 계획이 부분적으로 다를 수 있습니다 (테스트되지 않은 경우)
- 위의 이유로 인해 첫 번째 쿼리는 실제로 두 번째 쿼리보다 성능이 떨어집니다.
내 질문:
추론에서 빠진 것이 있습니까? 나 맞아? 마지막으로, 어떤 신체에 SARGability에 관한 좋은 기사가 있습니까?