Подтвердить что ты не робот

Используете ли CTE любое пространство в tempdb?

Используют ли CTE любое пространство в tempdb или используют ли он исключительно память?

Я отметил этот вопрос как с mssql 2005, так и с 2008 годом, поскольку я использую оба.

4b9b3361

Ответ 1

Я попытаюсь не копировать/вставлять MSDN

Это не имеет значения.

CTE не зависит от выполнения запроса: это только языковая конструкция. Подумайте об этом как о чистой производной таблице или подзапросе.

Это означает, что за исключением рекурсивных CTE (см. ниже), CTRL-коды все могут быть закодированы inline. Если вы используете код CTE один раз, он предназначен для чтения. Если вы используете CTE два или более раза, то он защищен: вы не хотите делать ошибку и иметь производную таблицу по-разному для каждого использования.

Если CTE используется дважды или более, то этот код будет выполняться дважды или более. Он не будет выполняться один раз и кэшируется в tempdb.

Сводка: это может быть или не быть, как если бы код был встроенным.

Примечание: рекурсивный CTE представляет собой просто производную таблицу внутри производной таблицы внутри производной таблицы внутри производной таблицы внутри der... так же применяется.

Вы можете увидеть это в статье Тони Роджерсона. Использование tempdb будет происходить в любом случае, если закодировано inline. Он также отмечает, что использование временной таблицы может быть лучше из-за расширения макроса, которое я объяснил выше

FYI: то же самое относится к представлениям. Просто макросы.

Ответ 2

Общее выражение таблицы можно рассматривать как временный набор результатов который определяется в пределах выполнения одного SELECT, INSERT, UPDATE, DELETE или CREATE VIEW. Когда план запроса для общий запрос выражения таблицы использует оператор spool для сохранения промежуточных результатов запроса, Database Engine создает рабочую таблицу в tempdb для поддержки этой операции.

источник

Ответ 3

Из MSDN: http://msdn.microsoft.com/en-us/library/ms345368.aspx

Общее выражение таблицы можно рассматривать как временный набор результатов, определенный в пределах выполнения одного оператора SELECT, INSERT, UPDATE, DELETE или CREATE VIEW.

Когда в плане запроса для общего запроса выражения таблицы используется оператор spool для сохранения промежуточных результатов запроса, Database Engine создает рабочую таблицу в tempdb для поддержки этой операции.