Какая разница между предложением WITH и временной таблицей?

С точки зрения непрофессионала, какие будут основные различия между предложением WITH и временной таблицей?

В каком сценарии лучше использовать один над другим?

2 ответа

WITH Предложение обычно используется в запросе выбора, когда вам нужно выполнить какое-то объединение в паре подзапросов, которые содержат сложные предложения, такие как HAVING (хотя и не обязательно). Вообще говоря WITH пункт может быть использован только в SELECT заявление.

Но в случае, когда с данными нужно манипулировать, то есть вы хотите изменить данные на какое-то условие или даже хотели бы снова удалить несколько строк в зависимости от какого-то сложного условия, с которым вам хотелось бы работать TEMP TABLE, Хотя большинство случаев будет достигнуто WITH это обычно происходит за счет некоторой сложной логики, в TEMP В таблице можно использовать несколько разных операторов SQL для достижения того же.

Также, TEMP Таблица обычно используется как промежуточная таблица, а не как представление для SELECT запрос т.е. TEMP таблица используется, когда вы хотите загрузить тонны данных из S3 Вы можете загрузить данные во временную таблицу, проанализировать данные, удалить избыточность и, наконец, объединить их в исходную таблицу за один раз.

В то время как TEMP таблица является переходной только для текущего сеанса, WITH всегда переоценивается.

Основное отличие состоит в том, что временная таблица является сохраненной таблицей. CTE больше похож на представление и помогает вам выразить ваш SQL в более понятном и логичном виде. Те же различия применимы к таблицам и представлениям в том смысле, что таблица дает вам возможность действовать эффективно.

Если вы строите очень сложный запрос или запрос, который нужно строить поэтапно, предложение WITH /CTE поможет вам в этом. Однако, если вы хотите сохранить данные в таблице для повышения производительности, лучшим выбором будет временная таблица. Точно так же временную таблицу можно использовать снова и снова, поэтому, если у вас был один и тот же код, использованный в нескольких запросах, вы могли бы рассмотреть временную таблицу, а не CTE.

Другие вопросы по тегам