Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2641 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Resolu] entre count(1) et count(*) lequel ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu] entre count(1) et count(*) lequel ?

n°1414571
Kineas
Posté le 27-07-2006 à 14:49:33  profilanswer
 

Bonjour a tous,  
bon comme vous pouvez vous en douter tout est dans el titre !
Plus précisemment, est-ce qu'il y a une différence entre : Select COUNT(*) ... et Select COUNT(1) ?
Et si y'a une différence, laquelle des 2 formes il faut utiliser ?

Message cité 1 fois
Message édité par Kineas le 27-07-2006 à 16:31:38
mood
Publicité
Posté le 27-07-2006 à 14:49:33  profilanswer
 

n°1414586
Arjuna
Aircraft Ident.: F-MBSD
Posté le 27-07-2006 à 15:10:12  profilanswer
 

aucune différence.
dans les deux cas le count porte sur les index
 
par contre, la question à se poser, c'est quand on a des regroupements et des count(distinct ...)

n°1414632
Kineas
Posté le 27-07-2006 à 15:34:06  profilanswer
 

Tu es sûre qu'il n'y a aucunes différences ?
On me dit que le count(1) est plus rapide à exécuter que le count(*) mais si c'est bien le cas, je ne vois pas pourquoi ?!

n°1414667
betsamee
Asterisk Zeperyl
Posté le 27-07-2006 à 15:52:29  profilanswer
 

je pense que ceci est une idee recue fausse qui est tres repandue
comme le dit Arjuna c'est strictement la meme chose

n°1414691
Arjuna
Aircraft Ident.: F-MBSD
Posté le 27-07-2006 à 16:03:07  profilanswer
 

Kineas a écrit :

Tu es sûre qu'il n'y a aucunes différences ?
On me dit que le count(1) est plus rapide à exécuter que le count(*) mais si c'est bien le cas, je ne vois pas pourquoi ?!


ça date de l'époque des premiers SGBD, notament Ingres.
 
Son count() faisait systématiquement un distinct quand on passait des champs.
 
donc un count(*) forçait le SGBD à checker tous les tuples uniques de la table.
 
donc imagine une table avec 1 Mligne et 50 colonnes... tu foutais le serveur à plat ;)
le count(1) forçait Ingres à ne pas faire de check d'unicité, et donc passait d'un traîtement de quelques heures à quelques milli-secondes :)
 
PS: rapidement, Ingre a modifié la fonctionnement du count() pour écrire finalement sa définition de la norme sql 92 : le distinct doit être écrit explicitement si on veut faire un distinct, et dans ce cas, il porte même sur les constantes :
 
select count(distinct 1) from matableavec10^99999999lignes
 
=> retourne 1


Message édité par Arjuna le 27-07-2006 à 16:05:00
n°1414742
Kineas
Posté le 27-07-2006 à 16:31:10  profilanswer
 

Ok merci pour vos réponses !
Bon bah pas besoin de changer tous mes Count(*) en Count(1) :D

n°1414783
orafrance
Posté le 27-07-2006 à 16:56:19  profilanswer
 

à noter quand même que ça a un impact sur le parsing. En tout cas sous Oracle :)
 
En effet, COUNT(colonne) (et pas 1) permet de faire du soft parse alors que COUNT(*) ou COUNT(1) fera du hard parse si on est avec un CURSOR_SHARING à EXACT.
 
PS : ceci étant, c'est juste pour l'anecdote... évidemment dans la plupart des cas, la différence est infime :)


Message édité par orafrance le 27-07-2006 à 16:57:05
n°1414792
orafrance
Posté le 27-07-2006 à 17:02:20  profilanswer
 

pour info : http://www.oracledba.co.uk/tips/count_speed.htm


Message édité par orafrance le 27-07-2006 à 17:03:15
n°1415245
cinocks
Posté le 28-07-2006 à 13:44:54  profilanswer
 

Kineas a écrit :

Bonjour a tous,  
bon comme vous pouvez vous en douter tout est dans el titre !
Plus précisemment, est-ce qu'il y a une différence entre : Select COUNT(*) ... et Select COUNT(1) ?
Et si y'a une différence, laquelle des 2 formes il faut utiliser ?


 
j'opte pour le count(1). Au moins tu es certain que le requeteur ne s'amuse pas à recuperer tous les champs et compter les enregistrements.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Resolu] entre count(1) et count(*) lequel ?

 

Sujets relatifs
[RESOLU] EJB : Problème méthode findAll() avec Jonas[resolu] problème d'affichage d'images sous IE
[Résolu]Aide pour la fonction preg_match +....[RESOLU] Installeur - repertoire destination
[javascript] passage de zone à zone [résolu mais moche]Affichage étrange de données hexa contenues dans un buffer [Résolu]
[RESOLU] formule francais/anglais[resolu] pb execution requete
[Résolu] Redirection si url utilisé ne convient pas 
Plus de sujets relatifs à : [Resolu] entre count(1) et count(*) lequel ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR