On Mon, 3 May 2004, Joseph Shraibman wrote:

> I have a big table with some int fields.  I frequently need to do 
> queries like:
> 
> SELECT if2, count(*) FROM table WHERE if1 = 20 GROUP BY if2;
> 
> The problem is that this is slow and frequently requires a seqscan. I'd 
> like to cache the results in a second table and update the counts with 
> triggers, but this would a) require another UPDATE for each 
> INSERT/UPDATE which would slow down adding and updating of data and b) 
> produce a large amount of dead rows for vacuum to clear out.
> 
> It would also be nice if this small table could be locked into the pg 
> cache somehow.  It doesn't need to store the data on disk because the 
> counts can be generated from scratch?

I think you might be interested in materialized views.  You could create 
this as a materialized view which should be very fast to just select * 
from.

While materialized views aren't a standard part of PostgreSQL just yet, 
there is a working implementation available from Jonathan Gardner at:

http://jonathangardner.net/PostgreSQL/materialized_views/matviews.html

It's all implemented with plpgsql and is quite interesting to read 
through.  IT has a nice tutorial methodology to it.


---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend

Reply via email to