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 намного быстрее. Это просто использование более эффективного алгоритма?

0 ответов

Другие вопросы по тегам