Почему CTE лучше, чем курсор / производная таблица / подзапросы / временная таблица и т. Д.? - PullRequest
5 голосов
/ 26 июля 2011

Как и почему CTE дает лучшую производительность по сравнению с производными таблицами / подзапросами / временными таблицами и т. Д.?

Любые временные вычисления происходят во временной базе данных. Поэтому, если у нас есть курсорный подход, он также создает временную таблицу / рабочую таблицу во временной базе данных, и после завершения операции эта рабочая таблица уничтожается. Насколько я понимаю, CTE также делает то же самое (или создает временный результат в памяти? И, следовательно, повышает производительность). Тогда почему он лучше, чем описанные выше подходы, такие как курсор / производная таблица / подзапросы / временная таблица и т. Д.?

1 Ответ

8 голосов
/ 26 июля 2011

A (не рекурсивный) CTE не использует курсоры. Это комплексный подход. Это большая разница по сравнению с использованием курсоров. Но тогда верно то, что курсоры вообще не используются.

Курсоры следует избегать, где это абсолютно возможно (как я уверен, мы все знаем).

CTE не обязательно лучше, чем использование производной таблицы, но приводит к более понятному коду TSQL. CTE - это просто сокращение для запроса или подзапроса; что-то похожее на временное представление.

Смежный вопрос: Каковы преимущества / недостатки использования CTE?

...