|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre confirmé
![]() Inscription : mars 2007 Messages : 750 ![]() |
Bonjour,
j'aurais voulu savoir quel était la meilleure solution pour faire un count dans une table. Est-ce le count(*)? count(1)? count(PrimaryKey)? |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
ça n'a aucune importance
Moi j'aime bien mettre le nom de la colonne qui m'intéresse et si c'est les lignes sans que la colonne importe alors je mets 1... mais tu peux mettre ce que tu veux |
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() Inscription : mars 2007 Messages : 750 ![]() |
donc y'a pas de meilleure performance avec count(PrimaryKey) plutot que count(*)? 1 DBA y'a quelques années m'avait fait modifier toutes mes lignes de codes pour remplacer les count(*) par des count sur la Primary Key.
|
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
mais les versions d'Oracle évolue et l'optimiseur avec
|
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
C'est depuis la version 8i (peut-être même avant, mais je suis moins sûr de mon coup...) que l'optimiseur s'arrange avec le count( ???? ) et passe outre ce qu'il y a entre parenthèse.
Mais avant, c'est sûr qu'il fallait faire attention ! |
|
|
00
|
|
|
#6 |
|
Membre expérimenté
![]() Inscription : juillet 2007 Messages : 495 ![]() |
On dit toujours que le COUNT(*) est un peu plus lent...
Par contre, attention : un COUNT sur une colonne ne compte pas les enreg. dont la colonne en question vaut null !
__________________
Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche ! |
|
|
00
|
|
|
#7 |
|
Membre confirmé
![]() Inscription : octobre 2006 Messages : 221 ![]() |
La meilleure solution est ne pas faire un count du tout.
Quelle est la raison pour ça? DAB |
|
|
00
|
|
|
#8 |
|
Membre expérimenté
![]() Inscription : juillet 2007 Messages : 495 ![]() |
OK, mais qu'est-ce que tu proposes ?
__________________
Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche ! |
|
|
00
|
|
|
#9 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
et ce n'est pas fondé : http://asktom.oracle.com/pls/asktom/...:1156159920245
|
|
|
00
|
|
|
#10 | |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Citation:
Sinon, pas de souci |
|
|
|
00
|
|
|
#11 |
|
Membre confirmé
![]() Inscription : octobre 2006 Messages : 221 ![]() |
Peut-être l'order suivant suffit:
Code :
SELECT 1 FROM dual WHERE EXISTS (SELECT 1 FROM matable) DAB |
|
|
00
|
|
|
#12 |
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
|
|
|
00
|
|
|
#13 | |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Citation:
|
|
|
|
00
|
|
|
#14 | ||
|
Membre confirmé
![]() Inscription : octobre 2006 Messages : 221 ![]() |
oui oui, mais on peut souvent voir:
Code :
DAB |
||
|
|
00
|
|
|
#15 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
on disait aussi que la terre était plate il y a qq temps...
Non, c'est le contraire, dans le pire des cas, COUNT(*) est aussi rapide que count(primarykey) voire COUNT(1), mais le plus efficace et le plus logique est COUNT(*), Il n'existe à ce jour aucun exemple d'une expression différente et plus rapide que COUNT(*) |
|
00
|
|
|
#16 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
Citation:
OCM Grégory Guillou a cependant trouvé un exemple en 11g où il vallait mieux employer count(*) ;-) http://www.pythian.com/blogs/627/ora...unt-and-count1 |
|
|
00
|
|
|
#17 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Selon la régle qui veut qu'une version d'Oracle ne doit pas être installé avant la 2° release, je pense qu'on va attendre la 11.2 avant de tirer des conclusions
Ceci étant dit, l'exemple est pour le moins étrange... la logique aurait voulu (selon moi
|
|
|
00
|
|
|
#18 | ||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
pour démontrer le non-sens de COUNT(PK), voici un petit exemple :
Code :
Code :
|
||||
|
00
|
|
|
#19 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
Citation:
|
|
|
00
|
|
|
#20 |
|
Membre confirmé
![]() Inscription : mars 2007 Messages : 750 ![]() |
bon ba merci à tous pour vos réponses
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com