SQL 2005 CTE против таблицы TEMP Производительность при использовании в соединениях других таблиц

У меня есть сложный запрос, который мне нужно использовать в последующем запросе (на самом деле, обновить заявление). Я пробовал использовать CTE и временную таблицу. Производительность при использовании CTE ужасна по сравнению с подходом к временным таблицам. Это что-то вроде 15 секунд против миллисекунд. Чтобы упростить тест вместо того, чтобы присоединять таблицу CTE / Temp в последующем запросе, я просто выбрал * из нее. В этом случае они выполняют то же самое.

Я посмотрел на План выполнения для обоих подходов и с объединениями в последующем запросе, а затем просто выберите *. При простом выборе планы запросов примерно одинаковы, но при объединениях в последующем выборе планы запросов не совпадают. В частности, часть плана запроса для создания и заполнения временной таблицы остается неизменной, в то время как часть плана запроса для создания и заполнения CTE кардинально меняется, когда она впоследствии используется в запросе с объединением.

Мой вопрос заключается в том, почему план запроса для создания и заполнения CTE изменяется в зависимости от того, как он впоследствии используется, а временная таблица - нет. Кроме того, в каких случаях CTE даст лучшую производительность, чем временная таблица?

* Обратите внимание, что я также использовал переменную таблицы, и она сопоставима с подходом временной таблицы.

Спасибо

Ответы на вопрос(4)

Ваш ответ на вопрос