Ich habe diese Funktion und die AbfrageDatum Kompression SQL Server
Funktion:
ALTER FUNCTION [dbo].[dateholiday]
(@date1 AS DATETIME,
@date2 AS DATETIME)
RETURNS DATETIME
AS
BEGIN
DECLARE @Answer AS DATETIME
IF(@date1 = @date2)
SET @Answer = @date2
RETURN @Answer
END
die Abfrage:
SELECT Posted_By
,Document_Number
,Account_Description
,dbo.dateholiday(CONVERT(NVARCHAR(10), CONVERT(DATETIME, Feiertage, 104), 20), [dbo].[QLIK].[Posted_Date]) AS Holiday
FROM [dbo].[FEIERTAGE_O]
,[dbo].[QLIK]
WHERE dbo.dateholiday(CONVERT(NVARCHAR(10), CONVERT(DATETIME, Feiertage, 104), 20), [dbo].[QLIK].[Posted_Date]) IS NOT NULL
GROUP BY dbo.dateholiday(CONVERT(NVARCHAR(10), CONVERT(DATETIME, Feiertage, 104), 20), [dbo].[QLIK].[Posted_Date])
,Posted_By
,Document_Number
,Account_Description
wo FEIERTAGE_O ist eine Liste von 115 Tagen, aber die Posted_Date über ist 1914495. Die Abfrage funktioniert gut, aber das einzige Problem ist, dass es viel und viel Zeit in Anspruch nimmt. Also muss ich es schneller machen.
Irgendwelche Ideen!
Bitte posten Sie Ihren aktuellen Ausführungsplan Ihrer Anfrage – StackUser
'Join ohne Prädikat',' Skalarfunktion', 'Index Scan' - primäre Probleme – Devart
ist das die ganze Funktion? Scheint seltsam, auch der Name scheint nicht zur Funktion zu passen. Wie auch immer, Ihre Funktion erwartet zwei 'datetime' Werte, aber Sie füttern sie (mindestens) einen' NVARCHAR'. Ich nehme an, dass es implizit in eine "Datetime" konvertiert wird. Es kann auch hilfreich sein, die Funktion in einer Unterabfrage zu verwenden, damit Sie sie nicht so oft auswerten müssen. Die Funktion wird für das 'select', für' where' und für 'group by' ausgeführt – HoneyBadger