Я собираюсь сделать это как можно проще. После нескольких часов отладки я обнаружил источник моего DRASTIC замедления.
DECLARE @Id INT = 9999
SELECT *
FROM dbo.FN_Whatever(@Id, NULL, NULL)
Время исполнения: 15 минут
SELECT *
FROM dbo.FN_Whatever(9999, NULL, NULL)
Время выполнения: 0 секунд
Пожалуйста, помогите мне понять эту неприятную проблему ...
Вот эта функция немного заглохла (код частной компании, так что ...)
CREATE FUNCTION FN_Whatever
(@Id INT,
@V1 INT = NULL,
@V2 INT = NULL)
RETURNS TABLE
AS
RETURN
SELECT T1.Id, T1.Value
FROM Table T1
LEFT JOIN (SELECT X
FROM Table T2
WHERE Id = @Id
AND (@V1 IS NULL OR x = @V1)
AND (@V2 IS NULL OR y = @V2)
GROUP BY x, y, z) SH_List ON ...
JOIN
FN_2 (@Id, @V1) FN1 ON ...
WHERE
Id = @Id
AND (@V1 IS NULL OR x = @V1)
AND (@V2 IS NULL OR y = @V2)