From: Carlo Stonebanks <stonec.register@sympatico.ca>
To: 'Tom Lane' <tgl@sss.pgh.pa.us>
To: 'Merlin Moncure' <mmoncure@gmail.com>
Cc: pgsql-performance@postgresql.org
Subject: Re: Query works when kludged, but would prefer "best practice" solution
Date: Tue, 18 Sep 2007 02:29:17 -0400
Message-ID: <983F6A492717496499CC6115662FA01D@serenity> (raw)
In-Reply-To: <24950.1190086191@sss.pgh.pa.us>
References: <fcmnm1$24mj$1@news.hub.org>
<b42b73150709171703nac1641dk77754bd68606c91d@mail.gmail.com>
<24950.1190086191@sss.pgh.pa.us>
Hi Tom,
Thanks for the suggestion - this concept is pretty new to me. Can you expand
a bit on the idea of how to place such a "dummy" constraint on a function,
and the conditions on which it affects the planner? Would this require that
constraint_exclusion be set on?
(When I go to sleep, I have a dream -- and in this dream Tom writes a
brilliant three line code sample that makes it all clear to me, and I wake
up a PostgreSQL guru)
;-)
Carlo
-----Original Message-----
From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
Sent: September 17, 2007 11:30 PM
To: Merlin Moncure
Cc: Carlo Stonebanks; pgsql-performance@postgresql.org
Subject: Re: [PERFORM] Query works when kludged, but would prefer "best
practice" solution
"Merlin Moncure" <mmoncure@gmail.com> writes:
> On 9/17/07, Carlo Stonebanks <stonec.register@sympatico.ca> wrote:
>> Please see the section marked as "PROBLEM" in "ORIGINAL QUERY" plan
below.
> This looks like it might be the problem tom caught and rigged a solution
to:
>
http://people.planetpostgresql.org/dfetter/index.php?/archives/134-PostgreSQ
L-Weekly-News-September-03-2007.html
> (look fro band-aid).
No, fraid not, that was about misestimation of outer joins, and I see no
outer join here.
What I do see is misestimation of a set-returning-function's output:
-> Function Scan on zips_in_mile_range (cost=0.00..12.50 rows=1000
width=40) (actual time=149.850..149.920 rows=66 loops=1)
There's not any very nice way to improve that in existing releases :-(.
In 8.3 it will be possible to add a ROWS option to function definitions
to replace the default "1000 rows" estimate with some other number, but
that still helps little if the number of result rows is widely variable.
As far as kluges go: rather than kluging conditions affecting unrelated
tables, maybe you could put in a dummy constraint on the function's
output --- ie, a condition you know is always true, but the planner
won't know that, and will scale down its result-rows estimate accordingly.
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: stonec.register@sympatico.ca, tgl@sss.pgh.pa.us, mmoncure@gmail.com
Subject: Re: Query works when kludged, but would prefer "best practice" solution
In-Reply-To: <983F6A492717496499CC6115662FA01D@serenity>
* 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