SQL Server не поддерживает подробную статистику для табличных переменных и не выполняет автоматическую перекомпиляцию для отражения менее детального изменения информации о количестве элементов (без TF 2453), поэтому обычно предполагается, что они выводят одну строку.
Это означает, что иногда вы получаете неоптимальную стратегию объединения. Вторая версия может использовать статистику, а также позволяет избежать накладных расходов на вставку промежуточных результатов во временный объект.
Однако, если второй запрос дорогой для оценки, так как SomeDate
не проиндексирован, вы можете получить улучшенную производительность от материализации этого предварительного (по сравнению с многократной повторной оценкой).
Вы также можете рассмотреть возможность использования таблицы #temp
, поскольку это позволяет избежать проблемы статистики. Некоторые люди предлагают никогда , используя переменную таблицы в JOINs