From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Timothy Kane <tim(dot)kane(at)gmail(dot)com> |
Cc: | pgsql-general General <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: Convincing the query planner to play nice |
Date: | 2013-08-10 23:28:07 |
Message-ID: | 27410.1376177287@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Timothy Kane <tim(dot)kane(at)gmail(dot)com> writes:
> I seem to be having some grief with the 9.1.9 query planner favouring an index scan + merge join, over a sequential scan + hash join.
I believe the reason it's preferring the merge join plan is that it thinks
the executor will be able to terminate the merge join early as a
consequence of the range of join keys in "addresses" being only a fraction
of the range of join keys in "users". Notice that the total estimated
cost for the merge join is just a fraction of the full estimated cost of
the indexscan on "users"; the only way that's possible is if the indexscan
on "users" doesn't have to run through all of the table. Probably, the
range of join keys is wider than the planner thinks and so the merge join
can't terminate early. The fix therefore is to crank the stats target for
"addresses" up high enough that you get a reasonable value in pg_statistic
for the largest address_id value (look at the last histogram entry).
> Interestingly, on another instance of this same database running on postgres 8.3.8, the query planner correctly chooses the sequential scan method - having more sane cost estimates for the index scan method.
I think the 8.3 planner didn't take this effect into account. Or maybe it
did, but by chance the upper histogram value is closer to reality on the
older database.
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Tim Kane | 2013-08-11 00:24:07 | Re: Convincing the query planner to play nice |
Previous Message | Brent Wood | 2013-08-10 22:03:54 | Re: earthdistance |