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