From: Tom Lane <tgl@sss.pgh.pa.us>
To: pgdba <postgresql@inbox.com>
Cc: pgsql-performance@postgresql.org
Subject: Re: Incorrect row estimates in plan?
Date: Wed, 26 Sep 2007 12:38:09 -0400
Message-ID: <22791.1190824689@sss.pgh.pa.us> (raw)
In-Reply-To: <12903194.post@talk.nabble.com>
References: <12902068.post@talk.nabble.com>
<20944.1190817914@sss.pgh.pa.us>
<12903194.post@talk.nabble.com>
pgdba <postgresql@inbox.com> writes:
> Tom Lane-2 wrote:
> -> Bitmap Index Scan on slog_gri_idx
> (cost=0.00..82.26
> rows=2870 width=0) (actual time=41.306..41.306 rows=83538 loops=1)
> Index Cond: ((gid = 10000) AND (rule = ANY
> ('{1,2,8,9,10}'::integer[])) AND (CASE WHEN (rule = ANY
> ('{8,9}'::integer[])) THEN destip ELSE srcip END =
> '192.168.10.23'::inet))
>>
>> [ blink... ] Pray tell, what is the definition of this index?
> Original index: "create index slog_gri_idx on slog (gid,rule,(case when rule
> in (8,9) then
> destip else srcip end)) WHERE (rule in (1, 2, 8, 9, 10))"
> The purpose of that index is to match a specific query (one that gets run
> frequently and needs to be fast).
Ah. I didn't think you would've put such a specific thing into an index
definition, but if you're stuck supporting such badly written queries,
maybe there's no other way.
I rather doubt that you're going to be able to make this query any
faster than it is, short of buying enough RAM to keep the whole table
RAM-resident. Pulling 80000 random rows in 1200 msec doesn't sound
all that slow to me.
The ultimate solution might be to rethink your table designs ...
regards, tom lane
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: tgl@sss.pgh.pa.us, postgresql@inbox.com
Subject: Re: Incorrect row estimates in plan?
In-Reply-To: <22791.1190824689@sss.pgh.pa.us>
* 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