]> granicus.if.org Git - postgresql/commit
Tweak genericcostestimate's fudge factor for index size.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 24 Oct 2012 20:25:40 +0000 (16:25 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 24 Oct 2012 20:25:40 +0000 (16:25 -0400)
commitbf01e34b556ff37982ba2d882db424aa484c0d07
tree8cefcb14ad27cce62cebc90f46493a2cc2d76b7a
parenta4e8680a6c337955c021177457147f4b4d9a5df5
Tweak genericcostestimate's fudge factor for index size.

To provide some bias against using a large index when a small one would do
as well, genericcostestimate adds a "fudge factor", which for a long time
was random_page_cost * index_pages/10000.  However, this can grow to be the
dominant term in indexscan cost estimates when the index involved is large
enough, a behavior that was never intended.  Change to a ln(1 + n/10000)
formulation, which has nearly the same behavior up to a few hundred pages
but tails off significantly thereafter.  (A log curve seems correct on
first principles, since what we're trying to account for here is index
descent costs, which are typically logarithmic.)  Per bug #7619 from Niko
Kiirala.

Possibly this change should get back-patched, but I'm hesitant to mess with
cost estimates in stable branches.
src/backend/utils/adt/selfuncs.c