Toutes les réponses ci-dessus sont correctes, pour le cas de DISTINCT sur une seule colonne par rapport à GROUP BY sur une seule colonne. Chaque moteur de base de données a sa propre implémentation et ses propres optimisations, et si vous vous souciez de la très petite différence (dans la plupart des cas), vous devez tester contre un serveur spécifique ET une version spécifique ! Comme les implémentations peuvent changer...
MAIS, si vous sélectionnez plus d'une colonne dans la requête, alors le DISTINCT est essentiellement différent ! Car dans ce cas, il comparera TOUTES les colonnes de toutes les lignes, au lieu d'une seule colonne.
Donc si vous avez quelque chose comme :
// 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
C'est une erreur commune de penser que le mot-clé DISTINCT distingue les lignes par la première colonne que vous avez spécifiée, mais le DISTINCT est un mot-clé général de cette manière.
Vous devez donc faire attention à ne pas considérer les réponses ci-dessus comme correctes dans tous les cas... Vous pourriez être confus et obtenir de mauvais résultats alors que tout ce que vous vouliez, c'était optimiser !
4 votes
Vous pourriez tester par vous-même en posant la question. Il est irritant de constater qu'il est presque impossible de construire un scénario dans lequel DISTINCT est plus performant que GROUP BY - ce qui est ennuyeux car ce n'est clairement pas le but de GROUP BY. Cependant, GROUP BY peut produire des résultats trompeurs, ce qui, à mon avis, est une raison suffisante pour l'éviter.
0 votes
Il y a un autre duplicata avec une réponse différente. voir MySql - Distinct vs Groupe par <<< il dit que GROUP BY est mieux
0 votes
Veuillez consulter aquí si vous voulez mesurer la différence de temps entre DISTINCT et GROUP BY pour exécuter votre requête.