pg.ddx.io  pgsql-performance@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Heikki Linnakangas <hlinnakangas@vmware.com>
To: Will Platnick <wplatnick@gmail.com>
Cc: pgsql-performance@postgresql.org
Subject: Re: Slow Query Help
Date: Tue, 05 Feb 2013 15:58:24 +0200
Message-ID: <51111000.1010200@vmware.com> (raw)
In-Reply-To: <ED51F03F1D2C469EB2F7FF91C677AD4F@gmail.com>
References: <ED51F03F1D2C469EB2F7FF91C677AD4F@gmail.com>
List-Unsubscribe:  <mailto:majordomo@postgresql.org?body=unsub%20pgsql-performance>

On 05.02.2013 05:45, Will Platnick wrote:
> We upgraded from PG 9.1 to 9.2. Since the upgrade, the # of active queries has raised significantly, especially during our peak time where lots of users are logging in.  According to New Relic, this query is now taking up the most amount of time during peak activity and my pg_stat_activity and slow log sampling agrees. We have 3 DB servers referenced here, production running 9.2.2, semi-idle (idle except for replication when I ran the test) running 9.2.2, and 9.1.3 completely idle with an old dump restored.

The only thing that stands out is that it always checks both indexes for 
matches. Since you only want a single row as a result, it seems like it 
would be better to first check one index, and only check the other one 
if there's no match. Rewriting the query with UNION should do that:

SELECT id, username, password, email, verified, timezone FROM users 
WHERE lower(username) = 'randomuser'
UNION ALL
SELECT id, username, password, email, verified, timezone FROM users 
WHERE lower(email) = 'randomuser'
LIMIT 1;

Also, if you can assume that email addresses always contain the 
@-character, you could take advantage of that and only do the 
lower(email) = 'randomuser' search if there is one.

- Heikki


-- 
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance



view thread (11+ messages)  latest in thread

Message-ID: <51111000.1010200@vmware.com>
Permalink:  ../51111000.1010200@vmware.com/
Also on:    postgresql.org/message-id/51111000.1010200@vmware.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-performance@postgresql.org
  Cc: hlinnakangas@vmware.com, wplatnick@gmail.com
  Subject: Re: Slow Query Help
  In-Reply-To: <51111000.1010200@vmware.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