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

こんにちはベン、 テーブル値関数です。 @ Shnugo - 私はインデックスを適用しようとしましたが、変更は実行プランの入力ごとに行われます。それでも時間が増えています。 – jitu

答えて