16 votes

Meilleure pratique SQL : count(1) ou count(*)

Duplicata possible :
Compte(*) vs Compte(1)

Je me souviens qu'on m'a dit, de manière anecdotique :

n'utilisez jamais count(*) lorsque count(1) fait l'affaire

Récemment, j'ai transmis ce conseil à un autre développeur, et on m'a demandé de prouver que c'était vrai. Mon argument était ce qu'on m'avait dit en même temps que le conseil : que la base de données ne renverrait que la première colonne, qui serait alors comptée. Le contre-argument était que la base de données n'évaluerait rien dans les parenthèses.

D'après quelques essais (non scientifiques) sur de petites tables, il ne semble pas y avoir de différence. Je n'ai actuellement pas accès à de grandes tables pour faire des essais.

On m'a donné ce conseil lorsque j'utilisais Sybase et que les tables comptaient des centaines de millions de lignes. Je travaille maintenant avec Oracle et j'ai beaucoup moins de données.

Donc je suppose qu'en résumé, mes deux questions sont :

  1. Lequel est le plus rapide, count(1) ou count(*) ?
  2. Cela varie-t-il selon les différents fournisseurs de bases de données ?

1voto

Itay Grudev Points 2014

Pour autant que je sache, utiliser count( ) devrait être plus rapide car lorsque cette fonction est appelée, le moteur ne compte que les index. D'un autre point de vue, les deux fonctions count( ) et count(1) en code binaire se ressemblent beaucoup, il ne devrait donc pas y avoir de différence.

-7voto

MaxSan Points 310
  1. compte(1)
  2. Non, de manière générale, les performances seront toujours légèrement meilleures.

Cela n'aurait d'effet que si la mise à l'échelle était trop importante, mais c'est une bonne pratique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X