Все приведенные выше ответы верны для случая DISTINCT в одном столбце и GROUP BY в одном столбце. Каждый движок db имеет свою собственную реализацию и оптимизацию, и если вы заботитесь об очень небольшой разнице (в большинстве случаев), вам нужно протестировать на конкретном сервере И конкретной версии! Поскольку реализации могут измениться ...
НО, если вы выберете более одного столбца в запросе, то DISTINCT существенно отличается! Потому что в этом случае он будет сравнивать ВСЕ столбцы всех строк, а не только один столбец.
Итак, если у вас есть что-то вроде:
// This will NOT return unique by [id], but unique by (id,name)
SELECT DISTINCT id, name FROM some_query_with_joins
// This will select unique by [id].
SELECT id, name FROM some_query_with_joins GROUP BY id
Распространенная ошибка - думать, что ключевое слово DISTINCT различает строки по первому указанному вами столбцу, но DISTINCT в этом смысле является общим ключевым словом.
Итак, люди, которых вы должны быть осторожны, чтобы не принять приведенные выше ответы как правильные для всех случаев ... Вы можете запутаться и получить неправильные результаты, в то время как все, что вам нужно, это оптимизировать!
person
daniel.gindi
schedule
16.05.2013