0

Насколько я понимаю, табличные выражения не сохраняются, что означает, что каждая ссылка на него во внешнем коде является повторным вызовом определения. Здесь табличные переменные/временные таблицы вступают в изображение, сохраняя таблицу и избегая повторной оценки каждый раз. Мне кажется, что таблицы переменных/временные таблицы - лучший выбор, чтобы избежать повторения. Я сделал anology программирования, где вместо вызова методаТабличное выражение и переменная таблицы/временная постоянная таблица

myMethod() 

каждый раз, я предпочел бы присвоить переменной к нему

int res = myMethod() 

избежать вызова MyMethod() несколько раз. myMethod() аналогичен табличному выражению, а res - табличной переменной/временной таблице.

Так почему бы нам использовать табличные выражения? В каких сценариях мы должны использовать табличные выражения вместо двух других? И наоборот?

спасибо.

+0

КТР добавит рекурсивные возможности, а также сделать код более удобным для чтения, чем производные таблицы для многих людей , –

+0

Интересное мнение http://sqlserverplanet.com/design/ctes-vs-temp-tables-an-opinion –

ответ

1

Исходя из моего опыта

  • Представьте, что вы вставить 10 миллионов записей в временную таблицу и использовать его только один раз. Это будет пустая трата времени, памяти и процессора. Чтобы более эффективно использовать огромную таблицу temp, вам также необходимо создать индекс поверх таблицы temp. Хотя, CTE использует индекс из существующей таблицы.
  • Если вы хотите группировать столбец из скалярного выражения. Например. сгруппируйте столбец row_number().
  • Более читаемый для сложного запроса
  • И, конечно, это позволит нам написать рекурсивный запрос, который очень круто

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

  • Нет связанных вопросов^_^