2017-02-20 154 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 

以上查詢花費的時間太多。交叉應用表值函數花費太多時間

我需要交叉應用表值函數的建議是否有效。

任何幫助表示讚賞。

感謝

+1

'f_getmycount()'是什麼類型的函數?標量函數,內聯表值函數或多語句表值函數?根據使用情況,我猜這不是標量,但我之前感到驚訝。 :) –

+0

顯示你的函數的(精簡?)代碼,並提供關於你的表和索引的一些細節。您是否嘗試過分析執行計劃? – Shnugo

+0

嗨Ben, 它是一個表值函數。 @Shnugo - 我試過應用索引,並根據執行計劃輸入完成更改。它仍然有更多的時間。 – jitu

回答