1

最後のクエリ実行時間は2500ノードを取得するのに8分であるため、深刻な問題が発生しました。そして、それは他の2つのビューの組み合わせです。

最初のビューは:

SELECT
   RecTime, SQL AS str, ID, 
   ROW_NUMBER() OVER(ORDER BY RecTime,ID) AS rwnb 
FROM         
   (SELECT
       A.RecTime, X.SQL, X.ID
    FROM 
       dbo.EventView AS A 
    CROSS JOIN
       dbo.Incident AS X
    WHERE      
       (PATINDEX('%' + A.Col + '%', X.SQL) > 0)) AS INC

1秒と1600ノード

2番目のビューは:

SELECT     
   D.RecTime, D.Event, D.ID, CAST(CASE WHEN X.[Value] IS NULL THEN 0 ELSE X.[Value] END AS bit) AS Value
FROM         
   dbo.XDependencedEvents AS D 
INNER JOIN
    dbo.EventView AS X ON X.Col = D.Event 
                          AND D.RecTime BETWEEN X.RecTime AND X.ChangedDate

3秒の実行時間と2100ノード

そして最終的なビューは

SELECT 
    X.[Rectime], X.[ID], X.[str], D.[Event], D.[Value],X.[rwnb] 
FROM 
    [XDependencedIncidents] AS X
INNER JOIN [XEventStates] AS D ON X.[Rectime] = D.[Rectime]
                                  AND X.[ID] = D.[ID]

8分と2500ノード。

RowNumber AS rwnbを使用してビューの操作を高速化していますが、それでも非常に低速です。最初の2つのビューにselectintotempテーブルを使用する必要がありますか?または私はここで何か間違ったことをしていますか?

最終的な目的は、「イベント」が変更されるたびに、「イベント」のいくつかの「グループ」の値を取得することです。

4

2 に答える 2

1

これを試して:

SELECT X.[Rectime] , X.[ID] , X.[str], D.[Event], D.[Value],X.[rwnb] 
FROM [XDependencedIncidents] AS X
INNER JOIN [XEventStates] AS D ON X.[ID] = D.[ID]
WHERE X.[Rectime] = D.[Rectime]

それも遅い場合。を確認してくださいXEventStates Indexing

于 2011-04-18T05:37:03.670 に答える
0

私の奇妙な解決策は、次のような2番目と最後のビューを変更するようなRowNumberを使用することです。

SELECT     D.RecTime, D.Event, D.ID
,CAST(CASE WHEN X.[Value] IS NULL THEN 0 ELSE X.[Value] END AS bit) AS Value
,ROW_NUMBER() OVER(ORDER BY D.RecTime,D.ID) AS rwnb 
FROM         dbo.XDependencedEvents AS D 
    INNER JOIN
    dbo.EventView AS X 
        ON X.Col = D.Event 
        AND D.RecTime BETWEEN X.RecTime AND X.ChangedDate

SELECT X.[Rectime] , X.[ID] , X.[str], D.[Event], D.[Value],X.[rwnb], D.[rwnb]
FROM [XDependencedIncidents] AS X
INNER JOIN [XEventStates] AS D ON X.[ID] = D.[ID]
AND X.[Rectime] = D.[Rectime]

この奇妙な最適化の方法についてどう思いますか?何かあればもっと良い解決策が本当に欲しいです。

ところで、はい、行番号を追加すると、8分->5秒になります。

于 2011-04-18T06:02:06.143 に答える