Есть ли разница в производительности между CTE, подзапросом, временной таблицей или табличной переменной?
В этом отличноТАК вопрос, различия междуCTE
а такжеsub-queries
были обсуждены.
Я хотел бы специально спросить:
При каких обстоятельствах каждое из следующих действий более эффективно / быстрее?
CTE Sub-Query Temporary Table Table VariableТрадиционно я использовал многоtemp tables
в разработкеstored procedures
- поскольку они кажутся более читабельными, чем множество переплетенных подзапросов.
Non-recursive CTE
s очень хорошо инкапсулируют наборы данных и очень удобочитаемы, но есть ли конкретные обстоятельства, когда можно сказать, что они всегда будут работать лучше? или дело в том, что приходится постоянно искать разные варианты, чтобы найти наиболее эффективное решение?
EDIT
Мне недавно сказали, что с точки зрения эффективности временные таблицы являются хорошим первым выбором, поскольку они имеют связанную гистограмму, то есть статистику.