MySQL : SELECT DISTINCT vs. GROUP BY pour des valeurs uniques
Lors de la récupération de valeurs uniques d'une table MySQL, SELECT DISTINCT
et GROUP BY
peuvent sembler interchangeables, mais leurs performances peuvent différer considérablement. Cet article compare leur efficacité.
Scénario : Récupération de profession unique
Considérons une requête pour récupérer des professions uniques de la table users
pour les employés de 'XYZ' :
<code class="language-sql">SELECT u.profession FROM users u WHERE u.employer = 'XYZ' ORDER BY u.profession</code>
Pour garantir que seules les professions uniques sont renvoyées, nous pouvons utiliser SELECT DISTINCT
ou GROUP BY
:
Option 1 : SELECT DISTINCT
<code class="language-sql">SELECT DISTINCT u.profession FROM users u WHERE u.employer = 'XYZ' ORDER BY u.profession</code>
Option 2 : GROUP BY
<code class="language-sql">SELECT u.profession FROM users u WHERE u.employer = 'XYZ' GROUP BY u.profession ORDER BY u.profession</code>
Considérations relatives aux performances
Bien que les deux requêtes produisent le même résultat, SELECT DISTINCT
offre généralement de meilleures performances. MySQL optimise SELECT DISTINCT
à l'aide de techniques telles que les bitmaps ou les tables de hachage, filtrant efficacement les doublons en un seul passage. GROUP BY
, à l'inverse, implique le regroupement de lignes et une surcharge d'agrégation supplémentaire, ce qui peut potentiellement ralentir l'exécution des requêtes.
Exceptions : quand GROUP BY
pourrait être plus rapide
Bien que SELECT DISTINCT
l'emporte généralement, GROUP BY
peut le surpasser dans des situations spécifiques. Si la clause ORDER BY
inclut des colonnes au-delà de la colonne profession
, GROUP BY
peut offrir une optimisation supérieure.
Recommandation
Pour récupérer des valeurs uniques dans MySQL, SELECT DISTINCT
est généralement le choix le plus efficace. Cependant, il est crucial de comparer les deux requêtes avec vos données spécifiques pour déterminer l'approche optimale pour votre application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!