2010-06-24 2 views
1

Рассмотрим следующий SQL (SQL Server 2008) заявление:Как оператор WITH хранит набор записей для запроса выбора?

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

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

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

Благодарности

ответ

2

Нет, за this MSDN article

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

А также, as mentioned here:

Выражение общей таблицы (КТР) может быть мысль о том, как временный набор результатов , который определен в пределах одной SELECT, INSERT, UPDATE выполнение , DELETE или CREATE VIEW . CTE похожа на таблицу производных , так как она не сохраняется как объект и длится только для длины запроса .

+0

«... временный набор результат ...» вызвал наше мышление, что временный набор результатов в настоящее время хранится где-то временно (т.е. Tempdb.) – Russell

+0

@Russell - Да, я могу видеть, где формулировка немного облачно на этом. Используя CTE сам по себе, SQL Server не создает временную таблицу. Конечно, как и любой запрос, CTE или нет CTE, он может быть выгружен в tempdb в зависимости от того, что происходит. Но это не относится к CTEs – AdaTheDev

Смежные вопросы