Thread: Counting all rows

Counting all rows

From
"Stefan Arentz"
Date:
I need to get statistics from a bunch of tables. Simply the number of
records in them.

The query plan looks like this:

=> explain select count(id) from stuff;                           QUERY PLAN
-------------------------------------------------------------------Aggregate  (cost=1629.69..1629.70 rows=1 width=8)
-> Seq Scan on stuff  (cost=0.00..1517.75 rows=44775 width=8)
 

The sequential scan kind of worries me. Is there a better/faster way to do this?
S.S.


Re: Counting all rows

From
Andreas Kretschmer
Date:
Stefan Arentz <stefan.arentz@gmail.com> schrieb:

> I need to get statistics from a bunch of tables. Simply the number of
> records in them.
> 
> The query plan looks like this:
> 
> => explain select count(id) from stuff;
>                             QUERY PLAN
> -------------------------------------------------------------------
>  Aggregate  (cost=1629.69..1629.70 rows=1 width=8)
>    ->  Seq Scan on stuff  (cost=0.00..1517.75 rows=44775 width=8)
> 
> The sequential scan kind of worries me. Is there a better/faster way to do 
> this?

Yes. 

A "select count(*) from foo;" enforces a seq. scan. Solutions for this
are discussed here: http://www.varlena.com/GeneralBits/120.php


Andreas
-- 
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect.                              (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly."    (unknow)
Kaufbach, Saxony, Germany, Europe.              N 51.05082°, E 13.56889°


Re: Counting all rows

From
"Stefan Arentz"
Date:
On 6/23/07, Andreas Kretschmer <akretschmer@spamfence.net> wrote:
> Stefan Arentz <stefan.arentz@gmail.com> schrieb:
>
> > I need to get statistics from a bunch of tables. Simply the number of
> > records in them.
> >
> > The query plan looks like this:
> >
> > => explain select count(id) from stuff;
> >                             QUERY PLAN
> > -------------------------------------------------------------------
> >  Aggregate  (cost=1629.69..1629.70 rows=1 width=8)
> >    ->  Seq Scan on stuff  (cost=0.00..1517.75 rows=44775 width=8)
> >
> > The sequential scan kind of worries me. Is there a better/faster way to do
> > this?
>
> Yes.
>
> A "select count(*) from foo;" enforces a seq. scan. Solutions for this
> are discussed here: http://www.varlena.com/GeneralBits/120.php

Thank you Andreas. That is exactly what I was looking for.
S.


Re: Counting all rows

From
manchicken
Date:
On Saturday 23 June 2007 05:38:56 Andreas Kretschmer wrote:
> Stefan Arentz <stefan.arentz@gmail.com> schrieb:
> > I need to get statistics from a bunch of tables. Simply the number of
> > records in them.
> >
> > The query plan looks like this:
> >
> > => explain select count(id) from stuff;
> >                             QUERY PLAN
> > -------------------------------------------------------------------
> >  Aggregate  (cost=1629.69..1629.70 rows=1 width=8)
> >    ->  Seq Scan on stuff  (cost=0.00..1517.75 rows=44775 width=8)
> >
> > The sequential scan kind of worries me. Is there a better/faster way to
> > do this?
>
> Yes.
>
> A "select count(*) from foo;" enforces a seq. scan. Solutions for this
> are discussed here: http://www.varlena.com/GeneralBits/120.php
>
>
> Andreas

Is there any neat trick for doing this for paging estimates?  It looks like 
the only way to get a result count from a more complex query is to either 
fetch a count first, or to fetch all records and count them in the 
application.

-- 
~ manchicken <><
(A)bort, (R)etry, (I)nfluence with large hammer.
09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0


Please avoid sending me Word or PowerPoint attachments.
See http://www.gnu.org/philosophy/no-word-attachments.html