J'ai pas mal cherché sur le net et on trouve du pour et du contre. Donc j'en appelle aux pros du SQL qui ont un retour d'expérience.
Ma question est la suivante : Lorsque des colonnes sont fonctionnellement liées et qu'on veut faire un group by, vaut-il mieux mettre tous les champs dans le group by ou faire une agrégation inutile ?
Concrètement laquelle de ces 2 requêtes sera la plus performante ?
Ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT CLI.CLI_ID, MIN(CLI.CLI_NOM), COUNT(CDE.CDE_ID) FROM CLIENT CLI JOIN COMMANDE CDE ON CDE.CLI_ID = CLI.CLI_ID GROUP BY CLI.CLI_ID
Et je ne parle pas de MySQL, qui d'après ce que j'ai lu autorise de sélectionner des champs non groupés.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT CLI.CLI_ID, CLI.CLI_NOM, COUNT(CDE.CDE_ID) FROM CLIENT CLI JOIN COMMANDE CDE ON CDE.CLI_ID = CLI.CLI_ID GROUP BY CLI.CLI_ID, CLI.CLI_NOM
Personnellement, j'utilisais toujours la 1ère syntaxe mais aujourd'hui je me retrouve coincé avec un type bit sur lequel on ne peut pas faire de MIN ou MAX. Du coup, entre le mettre dans le group by ou faire un cast vers INT, pour faire un min puis refaire un cast faire bit, j'hésite...
Partager