Итак, у меня возникла серьезная проблема, потому что мой последний запрос времени выполнения составляет 8 минут, чтобы получить 2500 узлов. И это всего лишь сочетание 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 узлов
Второй вид:
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 для ускорения работы с представлениями, но это все еще очень медленно. Должен ли я использовать select во временных таблицах для первых 2 представлений? Или я что-то тут не так делаю?
Конечной целью является получение значений для некоторых «групп» «событий» для каждого случая, когда «события» меняются