В этом замечательном вопросе SO обсуждались различия между CTE и подзапросами.
Я хотел бы конкретно спросить:
В каких обстоятельствах каждый из следующих более эффективен/быстрее?
- CTE
- Sub-запрос
- Временная таблица
- Переменная таблицы
Традиционно, я использовал множество временных таблиц при разработке хранимых процедур - поскольку они кажутся более читаемыми, чем множество переплетенных подзапросов.
Нерекурсивные CTE инкапсулируют множество данных очень хорошо и очень читабельны, но существуют ли особые обстоятельства, когда можно сказать, что они всегда будут работать лучше? или это случай, когда вам нужно всегда возиться с различными вариантами, чтобы найти наиболее эффективное решение?
EDIT
Недавно мне сказали, что с точки зрения эффективности временные таблицы являются хорошим первым выбором, поскольку у них есть связанная гистограмма, то есть статистика.