Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme

  Alt 7. Mai 2008, 18:09
Die Funktion 'DateDiff' wird den Einsatz eines Index verhindern. Ich verwende bei DateTime-Vergleichen immer 'BETWEEN', hier wäre das z.B.
SQL-Code:
WHERE Table.DateTimeField Between DateAdd(minute,-1,@Date) and DateAdd (minute,1,@Date)
  AND dbo.DateOnly (Table.DateTimeField) = dbo.DateOnly(@Date)
Wobei 'dbo.DateOnly' eine UDF ist, die den Datumsanteil eine DateTime-Wertes liefert.
SQL-Code:
CREATE FUNCTION [dbo].[DateOnly] (@Date DateTime)
RETURNS Datetime AS
BEGIN
  Return cast (floor (cast (@Date as float)) as DateTime)
END
Die Werte der BETWEEN-Klausel werden vom Optimizer in Konstanten (ggü der Tabelle) übersetzt und damit kann der Index greifen. Bei Datediff geht das nicht, weil ja jedesmal die Differenz gebildet werden muss.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat