最後のクエリ実行時間は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テーブルを使用する必要がありますか?または私はここで何か間違ったことをしていますか?
最終的な目的は、「イベント」が変更されるたびに、「イベント」のいくつかの「グループ」の値を取得することです。