pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Josh Berkus <josh@agliodbs.com>
To: Denis <denis@next2me.com>
To: pgsql-performance@postgresql.org
Subject: Re: [SQL] Yet Another (Simple) Case of Index not used
Date: Tue, 8 Apr 2003 14:52:40 -0700
Message-ID: <200304081452.40424.josh@agliodbs.com> (raw)
In-Reply-To: <b6v9mv$1h8q$1@news.hub.org>
References: <b6v9mv$1h8q$1@news.hub.org>

Dennis,

> I'm running into a quite puzzling simple example where the index I've
> created on a fairly big table (465K entries) is not used, against all common
> sense expectations:
> The query I am trying to do (fast) is:
> 
> select count(*) from addresses;

PostgreSQL is currently unable to use indexes on aggregate queries.   This is 
because of two factors:
1) MVCC means that the number of rows must be recalculated for each 
connection's current transaction, and cannot be "cached" anywhere by the 
database system;
2) Our extensible model of user-defined aggregates means that each aggregate 
is a "black box" whose internal operations are invisible to the planner.

This is a known performance issue for Postgres, and I believe that a couple of 
people on Hackers are looking at modifying aggregate implementation for 8.0 
to use appropriate available indexes, at least for MIN, MAX and COUNT.  Until 
then, you will need to either put up with the delay, or create a 
trigger-driven aggregates caching table.

If you are trying to do a correlated count, like "SELECT type, count(*) from 
aggregates GROUP BY type", Tom Lane has already added a hash-aggregates 
structure in the 7.4 source that will speed this type of query up 
considerably for systems with lots of RAM.

(PS: in the future, please stick to posting questions to one list at a time, 
thanks)

-- 
-Josh Berkus
 Aglio Database Solutions
 San Francisco




view thread (35+ messages)  latest in thread

Message-ID: <200304081452.40424.josh@agliodbs.com>
Permalink:  ../200304081452.40424.josh@agliodbs.com/
Also on:    postgresql.org/message-id/200304081452.40424.josh@agliodbs.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: josh@agliodbs.com, denis@next2me.com, pgsql-performance@postgresql.org
  Subject: Re: [SQL] Yet Another (Simple) Case of Index not used
  In-Reply-To: <200304081452.40424.josh@agliodbs.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox