SQL DateDifference in einer WHERE-Klausel

9

Ich mache eine Abfrage wie folgt:

%Vor%

und funktioniert nicht

Ich versuche, die Daten zu erhalten, die nicht älter als drei Tage sind.

SQL-Server.

Wie geht das?

DATEDIFF arbeitet zu langsam ..

    
DarthVader 10.03.2011, 22:22
quelle

3 Antworten

25

DateDiff ist extrem schnell ... Ihr Problem besteht darin, dass Sie es für den Spaltenwert der Datenbanktabelle ausführen, daher muss der Abfrageprozessor die Funktion für jede Zeile in der Tabelle ausführen, selbst wenn für diese Spalte ein Index vorhanden war . Dies bedeutet, dass die gesamte Tabelle von der Festplatte geladen werden muss.

Verwenden Sie stattdessen die Funktion dateAdd für das heutige Datum, und vergleichen Sie die Datenbanktabellenspalte mit dem Ergebnis dieser einzelnen Berechnung. Jetzt wird nur DateAdd() einmal ausgeführt und es kann ein Index verwendet werden (falls vorhanden), um nur die Zeilen zu laden, die dem Prädikatkriterium entsprechen.

Where a.DateValue > DateAdd(day,-3,getdate())

Dadurch wird Ihr Abfrageprädikat SARG-fähig

    
Charles Bretana 10.03.2011, 22:31
quelle
1

Die Microsoft-Dokumentation unter Ссылка schlägt vor, dass anstelle von DateTimeNow solltest du getdate() haben. Funktioniert es besser so?

    
Gareth McCaughan 10.03.2011 22:27
quelle
0

Ihre Anfrage scheint nicht schlecht zu sein. Eine andere Möglichkeit, es anzugehen, wäre:

%Vor%     
cairnz 10.03.2011 22:26
quelle