Отличная группа против которой лучше
для простейшего случая мы все называем:
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. Если ложь, я очень хочу узнать о ее достойном использовании в ситуации с большими данными.
Большое спасибо!!:)
Ответы
Ответ 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)
, хотя я думаю, что основная причина немного отличается.