Bonjour,
je voudrais savoir a quoi sert le count(1) puisque le count(*) renvoie la meme chose ?
Merci
Bonjour,
je voudrais savoir a quoi sert le count(1) puisque le count(*) renvoie la meme chose ?
Merci
Bonjour,
C'est la même chose, même plan d'exécution et utilisation d'index.
Cependant, et là je ne parle que de mon expérience perso, je ne parles pas de vérité universelle (je vous vois venir là) je sais que certaines personnes ont l'habitudes d'utiliser le count(1) quand ils veulent simuler la clause "EXIST" !
Il y a eu une rumeur qui disait que count(1), sur les anciennes versions d'Oracle, fonctionnait de manière plus opti aussi
Bisous bisous
Bonjour,
Ca fait partie des mythes qui persistent (comme le mythe du bulk collect) consistant à croire que count(1) est plus efficace que count(*), alors qu'en fait c'est exactement la même chose.
Bonjour,
Je ne parle pas de si c'est plus rapide ou plus lent, je veux juste comprendre l'utilité, que represente le 1 dans count(1) ?
1 représente l'expression que tu comptes. count(1) va donc compter le nombre de lignes pour lesquelles 1 n'est pas NULL. Puisque 1 n'est pas NULL, c'est exactement la même chose que count(0), count(2).. ou count(*).
Le seul intérêt de mettre count(expr) au lieu de count(*) est si tu veux ignorer les lignes pour lesquelles expr est NULL (typiquement ici expr sera une colonne).
ATTENTION : il ne faut pas que la colonne dans count(colonne) soit en NOT NULL sinon ce filtrage sur les valeurs NULL ne marchera pas.
Et puis, sauf erreur de ma part, select count(*) est remplacé par Oracle par un select count(pk): il optimise de lui même l'expression en la réécrivant.
Envoyé par lepierot
Bah on t'a dit la réponse, si tu croises ça dans un script, c'est que le quidam qui l'a développé est persuadé qu'il aura son résultat plus vite... c'est ça l'utilité.
- So.... what exactly is preventing us from doing this?
- Geometry.
- Just ignore it !!
****
"The longer he lived, the more he realized that nothing was simple and little was true" A clash of Kings, George R. R. Martin.
***
Quand arrivera l'apocalypse, il restera deux types d'entreprise : les pompes funèbres et les cabinets d'audit. - zecreator, 21/05/2019
Penser que l'insertion/la mise à jour en masse de données sera plus efficace si on utilise du bulk collect.
https://asktom.oracle.com/pls/apex/f...10800346068768
https://blog.dbi-services.com/how-to...-plsql-vs-sql/
Alors qu'il faut simplement faire du SQL pur. Nettement plus rapide et scalable. D'autant plus qu'en Entreprise Edition on bénéficie du parallélisme natif. Un peu dommage de s'en priver pour faire tout en PGA, avec des changements de contexte PL/SQL-SQL.
De mémoire sur les versions d'Oracle d'il y a une vingtaine d'années (v7 / v8), Oracle créait une colonne virtuelle composée de 1 puis en faisait le décompte.
Ça posait des problèmes de performances inutiles, donc ils ont fini par traduire count(1) en count(*).
Partager