1

以下の更新プログラムを作成しましたが、パフォーマンスが低下しています。私の力ずくの試みよりも、クエリを作成するためのより簡単で効率的な方法があるかもしれないと感じています。助けてください。

Update LocalServers 
set MustIPL = 1 
where LocalServerID IN (SELECT distinct olu.LocationID 
                        from OfferLocUpdate olu with (NoLock) 
                        Join LocalServers ls WITH (NOLOCK) on olu.LocationID = ls.LocationID 
                        Join CPE_IncentiveDLBuffer DLB with (NoLock) on olu.OfferID = dlb.OfferID 
                        where 
                             olu.LastSent > IncentiveLastHeard 
                             and CreationDate < dateadd(d, -@Days, getdate()) 
                             and DLB.FileName LIKE '%IDL-A')
4

1 に答える 1

1

これを試して:

    DECLARE @DateNow DATETIME
    SET @DateNow = GETDATE()

    ;WITH cte_DLB (OfferID, [FileName]) AS
    (
        SELECT OfferID, [FileName]
        FROM CPE_IncentiveDLBuffer (NOLOCK)
        WHERE  DLB.[FileName] LIKE '%IDL-A'
    )
    UPDATE 
        LS
    SET 
        LS.MustIPL = 1
    FROM 
        LocalServers LS 
        JOIN OfferLocUpdate OLU (NOLOCK) ON LS.LocalServerID = OLU.LocationID
        JOIN LocalServers ls (NOLOCK) ON OLU.LocationID = LS.LocationID 
        JOIN cte_DLB ON OLU.OfferID = cte_DLB.OfferID
    WHERE 
        OLU.LastSent > IncentiveLastHeard 
        AND CreationDate < dateadd(d, -@Days, @DateNow)

「IncentiveLastHeard」および「CreationDate」列がどのテーブルに属しているかを明確にすると、非常に役立ちます。

于 2013-06-13T07:47:16.720 に答える