PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

execution de select count(*) from table;

Technique - optimisation | execution de select count(*) from table;

Par dom le 23/12/2005 - 12:01

Bonjour,

J'utilise une table d'environ 30M de lignes pour une taille de 2Go
dont j'ai définit une clé primaire associé à un index.

J'ai au prealable executé
cluster index ...
analyse table ....

Cependant j'obtient une réponse à select count(*) from table;
après 4 minutes ?????

Pourquoi la réponse n'est-elle pas immédiate??

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

Bonjour, quelle version de P

Jean-Christophe Arnu/ = 23 Décembre, 2005 - 15:19

Bonjour,
quelle version de PostegreSQL utilisez vous? Si elle est inférieure à la 8.0 en fait PostgreSQL fait un seq scan sur la table. Un explain de votre requête vous le confirmera.

Cordialement,
Jean-Christophe Arnu


Bonjour, sous Postgresql 8

alci/ = 5 Janvier, 2006 - 15:27

Bonjour,

sous Postgresql 8.0.3 je constate également le même piètre comportement sur les count(*). Et en effet, Pg fait un seq scan à chaque fois, malgré les index...

Ce n'est pas très grave car ce genre de requêtes n'est pas la plus fréquente en prod (quoique), mais dans le cadre d'une migration ou d'un développement, ça ne contribue pas à vendre Pg (le premier reflexe est toujours de faire un count(*) pour voir où on en est... Sous Oracle, c'est instantanné, sous Pg, plusieurs minutes !)

Y a-t-il une astuce pour améliorer les count(*) ?

Franck


On peut toujours essayer de n

SAS/ = 5 Janvier, 2006 - 19:22

On peut toujours essayer de ne pas faire un count(*), mais un count(nom_de_colonne_indexée), par exemple. Juste pour voir.

De toute façon, un count(*) n'est pas selon moi un critère de choix d'un SGBD...

Stéphane Schildknecht


Je suis d'accord, count(*) n'

alci/ = 8 Janvier, 2006 - 08:37

Je suis d'accord, count(*) n'est pas un critère de choix... sauf pour les DI qui décident !
En gros ils n'ont pas le temps d'être pointus techniquement, mais ils ne veulent pas décrocher non plus (structure moyenne, disons 1000 personnes, 8 à l'info). Le premier test, c'est le count(*) (déjà pour voir si les données sont là).

Si tu cumules count(*) pas rapide, plus logiciel libre (gratuit ? pas de support ? pas utilisé par mes copains ? pas dans le dernier 01 ? pas de plaquette commerciale sur le bureau ?), Postgresql perd des points un peu bêtement.

Mais oui, on peut vivre avec des count(*) minables :-)

Au fait, count(colonne_unique) from table; fait aussi un seq scan, je viens d'essayer.


Bonjour, C'est un prob

Jean-Paul Argudo/ = 6 Janvier, 2006 - 13:15

Bonjour,

C'est un problème connu et identifié dans PostgreSQL de longue date, une petite recherche dans la TODOLIST du projet PostgreSQL sur le mot clé count(*) nous précise que:


Speed up COUNT(*)

We could use a fixed row count and a +/- count to follow
MVCC visibility rules, or a single cached value could be used
and invalidated if anyone modifies the table. Another idea is to get
a count directly from a unique index, but for this to be faster than
a sequential scan it must avoid access to the heap to obtain
tuple visibility information.

C'est toujours en cours de discussion sur la liste pgsql-hackers, et depuis fort longtemps. Gageons que la communauté choisira la solution qu'elle trouvera la meilleure...

--
Jean-Paul ARGUDO
www.dalibo.com


© PostgreSQLFr, tous droits réservés.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.