В перспективе Teradata :
С точки зрения набора результатов не имеет значения, используете ли вы DISTINCT или GROUP BY в Teradata. Набор ответов будет таким же.
С точки зрения производительности, это не то же самое.
Чтобы понять, что влияет на производительность, вам нужно знать, что происходит с Teradata при выполнении оператора с помощью DISTINCT или GROUP BY.
В случае DISTINCT строки перераспределяются немедленно, без какой-либо предварительной агрегации, в то время как в случае GROUP BY на первом шаге выполняется предварительная агрегация, и только после этого уникальные значения перераспределяются по AMP.
Не думайте, что GROUP BY всегда лучше с точки зрения производительности. Когда у вас много разных значений, шаг предварительной агрегации GROUP BY не очень эффективен. Teradata должна отсортировать данные, чтобы удалить дубликаты. В этом случае может быть лучше сначала перераспределить, то есть использовать инструкцию DISTINCT. Только если имеется много повторяющихся значений, оператор GROUP BY, вероятно, является лучшим выбором, поскольку только после выполнения шага дедупликации после перераспределения.
Короче говоря, DISTINCT против GROUP BY в Teradata означает:
GROUP BY -> для многих дубликатов
DISTINCT -> нет или только несколько дубликатов.
Иногда при использовании DISTINCT вам не хватает места в буфере на AMP. Причина в том, что перераспределение происходит немедленно, и перекос может привести к тому, что AMP не хватит места.
Если это произойдет, у вас, вероятно, больше шансов на использование GROUP BY, поскольку дубликаты уже удалены на первом шаге и меньше данных перемещается по AMP.