CROSS APPLY против OUTER APPLY, когда CROSS APPLY соответствует всем строкам
Пример:
UPDATE t
SET Amount = applied.MaxAmount
FROM @test t
CROSS APPLY
(
SELECT MAX(t2.Amount) AS MaxAmount
FROM @test t2
WHERE t2.Id = t.ForeignId
) AS applied
против
UPDATE t
SET Amount = applied.MaxAmount
FROM @test t
OUTER APPLY
(
SELECT MAX(t2.Amount) AS MaxAmount
FROM @test t2
WHERE t2.Id = t.ForeignId
) AS applied
Насколько я понимаю, эти два сценария будут выполнять одно и то же, поскольку функция MAX() всегда будет возвращать результат, даже если этот результат равен NULL. Но OUTER APPLY намного медленнее, чем CROSS APPLY, когда я применяю его к большому набору данных.
Я хотел бы знать, почему CROSS APPLY намного быстрее. Это просто использование более эффективного алгоритма?