Как оператор WITH хранит набор записей для запроса select? - PullRequest
1 голос
/ 24 июня 2010

Рассмотрим следующий оператор SQL (SQL Server 2008):

WITH MyResult AS
(
  SELECT 
    Name,
    Row_ID AS ORD
  FROM Person Where Gender = @Gender
)
SELECT *
FROM MyResult
WHERE ORD > 5

MyResult хранится во временной таблице в базе данных tempdb? Или это делает что-то еще?

Мы оптимизируем некоторые запросы и хотели бы лучше понять операторы WITH (внутренне), чтобы помочь оценить производительность и т. Д.

Спасибо

1 Ответ

2 голосов
/ 24 июня 2010

Нет, согласно этой статье MSDN

... CTE - это уровень языка конструкция - это означает, что SQL Server делает внутренне не создавать временные или виртуальные столы ...

А также, как упомянуто здесь :

Общее табличное выражение (CTE) может быть считается временным результатом это определено в исполнении объем одного SELECT, INSERT, ОБНОВЛЕНИЕ, УДАЛЕНИЕ или СОЗДАНИЕ ВИДА заявление. CTE похож на производная таблица в том, что она не хранится как объект и длится только для длительность запроса.

...