This should definitely be a FAQ.

The semantics of MVCC (multi-version concurrency control) means that you
can't just store a number somewhere in the header of the table like some
other database systems do.

Try a count(*) on Oracle and you will see similar behavior.  They use
MVCC also.

> -----Original Message-----
> From: Mark Harrison [mailto:[EMAIL PROTECTED] 
> Sent: Wednesday, October 15, 2003 11:00 AM
> To: [EMAIL PROTECTED]
> Subject: [GENERAL] constant time count(*) ?
> 
> 
> We're looking into moving some data from mysql to postgresql, 
> and notice that count(*) does not seem to be a constant-time 
> function as it seems to be in mysql.
> 
> planb=# explain select count(*) from assets;
>                             QUERY PLAN
> ----------------------------------------------------------------
>   Aggregate  (cost=22.50..22.50 rows=1 width=0)
>     ->  Seq Scan on assets  (cost=0.00..20.00 rows=1000 
> width=0) (2 rows)
> 
> Is there a way to optimize count(*) such that it does not 
> have to do a sequential scan?  We use this on some big tables 
> and it is slowing down processing quite a lot.
> 
> Thanks!
> Mark
> 
> -- 
> Mark Harrison
> Pixar Animation Studios
> 
> 
> ---------------------------(end of 
> broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to 
> [EMAIL PROTECTED])
> 

---------------------------(end of broadcast)---------------------------
TIP 9: the planner will ignore your desire to choose an index scan if your
      joining column's datatypes do not match

Reply via email to