2017-02-20 1 views
0
;WITH cte AS 
(
    SELECT DISTINCT 
     a.ID, a.code AS code, DATEPART(wk, INVCDATE) weekno, 
     (SELECT CONVERT(DATE, (SELECT CONVERT(DATEtime, v.invcdate) - DATEPART(dw, CONVERT(varchar, CONVERT(DATE, v.invcdate)))) + 1)) MinDateOfWeek, 
     (SELECT CONVERT(DATE, (SELECT CONVERT(DATEtime, v.invcdate) + (7 - DATEPART(dw, CONVERT(varchar, CONVERT(DATE, v.invcdate))))))) ADA 
    FROM 
     dbo.abc a 
    INNER JOIN 
     dbo.xyz b ON a.ID = b.ID 
    INNER JOIN 
     dbo.PLIST p ON a.ID = p.ID 
    INNER JOIN 
     dbo.VISITS v ON p.ID2 = v.ID2 
    INNER JOIN 
     dbo.UserList o ON o.ID = a.ID 
) 
SELECT 
    code, weekno, k.Id4, k.Id3, k.Id2, k.Id1, k.Id0 
FROM 
    cte 
CROSS APPLY 
    dbo.f_getmycount(ID, MinDateOfWeek, ADA) k 

Die obige Abfrage benötigt zu viel Zeit.Kreuz Anwenden der Tabelle Überarbeitete Funktion nimmt zu viel Zeit in Anspruch

Ich brauche Vorschläge, die Kreuz anwenden Tabelle Funktion ist effizient oder nicht.

Jede Hilfe wird geschätzt.

Dank

+1

Welche Art von Funktion ist 'f_getmycount()'? Eine Skalarfunktion, eine Inline-Tabellenwertfunktion oder eine Tabellenfunktion mit mehreren Anweisungen? Aufgrund der Verwendung würde ich annehmen, dass es kein Skalar ist, aber ich war schon vorher überrascht. :) –

+0

Zeigen Sie den (reduzierten?) Code Ihrer Funktion an und geben Sie einige Details zu Ihren Tabellen und Indizes an. Haben Sie bereits versucht, den Ausführungsplan zu analysieren? – Shnugo

+0

Hi Ben, Es ist eine Tabellenwertfunktion. @Shnugo - Ich habe versucht, Indizes anzuwenden und Änderungen erfolgen gemäß den Ausführungsplan-Eingaben. Trotzdem wird es mehr Zeit. – jitu

Antwort

Verwandte Themen