Эффективно ли использование подзапроса для выбора указанных c столбцов в предложении? - PullRequest
0 голосов
/ 10 февраля 2020

Предположим, что table1 имеет столбец a, b, c, ..... z.

Работает ли выбор определенных столбцов c с использованием подзапроса в условии from из условия лучше, чем просто выбор всех (* )?

ИЛИ приводит ли это к дополнительным вычислениям? (Я использую HIVE)

A)

select
    table1.a,
    table1.b,
    table2.aa,
    table2.bb

FROM (SELECT table1.a
               ,table1.b
            FROM table1
       )

   join table2 on  (table1.b = table2.b)




B)
select
    table1.a,
    table1.b,
    table2.aa,
    table2.bb

   FROM table1 

   join table2 on  (table1.b = table2.b)

Спасибо

1 Ответ

1 голос
/ 10 февраля 2020

Использование подзапроса для выбора указанных c столбцов, как правило, плохая идея, независимо от базы данных. Однако в большинстве баз данных это не влияет на производительность.

Почему это плохая идея? По сути, это может сбить с толку оптимизатора и / или любого, кто читает запрос. В зависимости от базы данных,

  • Это усложняет обслуживание запросов (добавление нового столбца может потребовать повторения имени столбца многократно в подзапросах).
  • Подзапросы могут быть материализовано (это не должно происходить в Hive).
  • Сокращение разделов может не работать, если сокращение выполняется во внешних запросах.
  • Это может препятствовать использованию индексов (не относится к Hive).
  • Это может привести к путанице в оптимизаторе и статистике (возможно, это не относится к Hive).

Я не могу придумать вескую причину для фактического усложнения запроса путем введения ненужных подзапросов для этой цели. .

...