Подтвердить что ты не робот

Отличная группа против которой лучше

для простейшего случая мы все называем:

select id from mytbl 
group by id

и

select distinct id from mytbl

как мы знаем, они генерируют тот же план запросов, который неоднократно упоминался в некоторых пунктах, таких как Что лучше: Distinct или Group By

В улье, однако, у первого есть только одна задача сокращения, в то время как у последнего много.

Из экспериментов я установил, что GROUP BY 10+ раз быстрее, чем DISTINCT.

Они разные.

Так что я узнал:

GROUP-BY в любом случае не хуже DISTINCT, и это лучше иногда.

Я хотел бы знать:

1. Если этот вывод верен.

2. Если это правда, я буду рассматривать DISTINCT как подход для логического удобства, но почему DISTINCT не использует более эффективную реализацию GROUP-BY?

3. Если ложь, я очень хочу узнать о ее достойном использовании в ситуации с большими данными.

Большое спасибо!!:)

4b9b3361

Ответ 1

Ваш опыт интересен. Я не видел эффекта единственного редуктора для distinct по сравнению с group by. Возможно, есть небольшая разница в оптимизаторе между двумя конструкциями.

"Известный" пример в Hive:

select count(distinct id)
from mytbl;

против

select count(*)
from (select distinct id
      from mytbl
     ) t;

В первом используется только один редуктор, а последний работает параллельно. Я видел это как в своем опыте, так и документирован и обсужден (например, на слайдах 26 и 27 в этой презентации). Таким образом, distinct может определенно воспользоваться parallelism.

Я предполагаю, что по мере созревания улья такие проблемы будут исправлены. Однако иронично, что Postgres имеет аналогичную производительность с COUNT(DISTINCT), хотя я думаю, что основная причина немного отличается.