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

Почему вы не должны использовать DISTINCT, когда можете использовать GROUP BY?

Согласно tips из вики-страницы производительности MySQL:

Не используйте DISTINCT, если у вас есть или можно использовать GROUP BY.

Может ли кто-нибудь отправить пример запросов, где GROUP BY можно использовать вместо DISTINCT?

4b9b3361

Ответ 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.......".

DISTINCT - это дорогостоящая операция в СУБД.