Разница в производительности с условием Where в подзапросе/cte

Есть ли разница в производительности для применения условия where к источнику данных подзапроса по сравнению с его применением в объединенном операторе? Есть ли разница между ними в производительности?

Допустим, у меня есть две таблицы кустов A и B, которые разделены по дате поля.

WITH table_A AS (
  SELECT date, some_info FROM some_table WHERE date = '2020-12-11'
),
table_B AS (
  SELECT date, some_other_info FROM some_other_table WHERE date = '2020-12-11'
)

SELECT table_A.*, table_B.some_other_info FROM table_A INNER JOIN table_B

Является ли производительность этого запроса такой же, как и следующая?

WITH table_A AS (
  SELECT table_A, some_info FROM some_table
),
table_B AS (
  SELECT date, some_other_info FROM some_other_table 
)

SELECT table_A.*, table_B.some_other_info FROM table_A INNER JOIN table_B WHERE table_A.date = '2020-12-11'

Почему вы вообще используете CTE для этого запроса?

Gordon Linoff 11.12.2020 20:36

Просто игрушечный пример, чтобы продемонстрировать вопрос. Вы правы, что CTE необходимы в этом конкретном примере.

Jammy 11.12.2020 20:40

CTE в Hive постепенно улучшались с момента их появления, поэтому я думаю, что ответ будет зависеть от вашей версии Hive.

mazaneicha 11.12.2020 21:59
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
3
268
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

От чего это зависит? Ну что, CTE материализовался? То есть сохраняется в промежуточную "таблицу"? Это, увы, управляется настройкой hive.optimize.cte.materialize.threshold. Если CTE материализуется, то вы определенно хотите, чтобы он отфильтровывался в CTE>

С другой стороны, при материализации может быть потеряна другая полезная информация об исходных данных, например схемы разделения. Итак, еще раз, это зависит.

Я действительно думаю, что CTE, на который ссылаются только один раз, не материализуется с настройками по умолчанию. Так что в данном контексте это не имеет значения.

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