Почему вы не должны использовать DISTINCT, когда можете использовать GROUP BY?
Согласно tips из вики-страницы производительности MySQL:
Не используйте DISTINCT, если у вас есть или можно использовать GROUP BY.
Может ли кто-нибудь отправить пример запросов, где GROUP BY можно использовать вместо DISTINCT?
Ответ 1
Если вы знаете, что два столбца из вашего результата всегда связаны напрямую, то это медленнее:
SELECT DISTINCT CustomerId, CustomerName FROM (...)
чем это:
SELECT CustomerId, CustomerName FROM (...) GROUP BY CustomerId
потому что во втором случае он должен только сравнивать id, но в первом случае он должен сравнивать оба поля. Это особый трюк MySQL. Он не будет работать с другими базами данных.
Ответ 2
SELECT Code
FROM YourTable
GROUP BY Code
против
SELECT DISTINCT Code
FROM YourTable
Ответ 3
Основное правило: Поместите все столбцы из предложения SELECT в предложение GROUP BY
так
SELECT DISTINCT a,b,c FROM D
становится
SELECT a,b,c FROM D GROUP BY a,b,c
Ответ 4
Пример.
Клиент связи (ssnum, имя, почтовый индекс, адрес) PK (ssnum). ssnum - номер социального страхования.
SQL:
Select DISTINCT ssnum from customer where zipcode=1234 group by name
Этот оператор SQL возвращает уникальные записи для тех клиентов, у которых есть zipcode 1234. В конце результаты сгруппированы по имени.
Здесь DISTINCT не требуется. потому что вы выбираете ssnum, который уже уникален, потому что ssnun является первичным ключом. у двух человек не может быть такого же ssnum.
В этом случае Select ssnum from customer where zipcode=1234 group by name даст лучшую производительность, чем "... DISTINCT.......".