pg.ddx.io  pgsql-performance@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Edgardo Portal <egportal2002@yahoo.com>
To: pgsql-performance@postgresql.org
Subject: Re: Slow-ish Query Needs Some Love
Date: Tue, 2 Feb 2010 13:06:46 +0000 (UTC)
Message-ID: <hk9816$qh5$1@news.eternal-september.org> (raw)
References: <1d4feebf-ff4d-4463-b1c8-d1a12d27400c@z10g2000prh.googlegroups.com>

On 2010-02-02, Matt White <mattw922@gmail.com> wrote:
> I have a relatively straightforward query that by itself isn't that
> slow, but we have to run it up to 40 times on one webpage load, so it
> needs to run much faster than it does. Here it is:
>
> SELECT COUNT(*) FROM users, user_groups
>  WHERE users.user_group_id = user_groups.id AND NOT users.deleted AND
> user_groups.partner_id IN
>  (partner_id_1, partner_id_2);
>
> The structure is partners have user groups which have users. In the
> test data there are over 200,000 user groups and users but only ~3000
> partners. Anyone have any bright ideas on how to speed this query up?

Can you avoid running it 40 times, maybe by restructuring the
query (or making a view) along the lines of the following and
adding some logic to your page?

SELECT p.partner_id, ug.user_group_id, u.id, count(*)
  FROM partners p
       LEFT JOIN user_groups ug
              ON ug.partner_id=p.partner_id
       LEFT JOIN users u
              ON u.user_group_id=ug.id
 WHERE NOT u.deleted
 GROUP BY 1,2,3
;




view thread (6+ messages)  latest in thread

Message-ID: <hk9816$qh5$1@news.eternal-september.org>
Permalink:  ../hk9816$qh5$1@news.eternal-september.org/
Also on:    postgresql.org/message-id/hk9816$qh5$1@news.eternal-september.org

 · 

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-performance@postgresql.org
  Cc: egportal2002@yahoo.com
  Subject: Re: Slow-ish Query Needs Some Love
  In-Reply-To: <hk9816$qh5$1@news.eternal-september.org>

* 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