2013-10-18 8 views

Odpowiedz

13

Należy używać kwerendy zakresu zamiast owijać kolumnę w wywołaniu funkcji, aby można było użyć indeksu.

SELECT * 
FROM TABLE1 
WHERE duedate >= DATEADD(month, DATEDIFF(month, 0, getdate()), 0) 
     AND duedate < DATEADD(month, 1 + DATEDIFF(month, 0, getdate()), 0) 
+1

To zapytanie używa indeksu w kolumnie. –

+1

Ale nie zapominaj o [tym numerze] (http://www.sqlperformance.com/2013/09/t-sql-queries/datediff-bug), o którym po raz pierwszy mnie rozjaśniłeś [tutaj] (http: ///stackoverflow.com/a/18242413/61305). –

+0

@AaronBertrand - Dobrze, szkoda, że ​​nie wspomnieli o wersji SQL Server. Rozwiązaniem tego problemu jest rok 2008+. –