From: | Peter Geoghegan <pg(at)heroku(dot)com> |
---|---|
To: | Robert Haas <robertmhaas(at)gmail(dot)com> |
Cc: | Heikki Linnakangas <hlinnakangas(at)vmware(dot)com>, Noah Misch <noah(at)leadboat(dot)com>, Marti Raudsepp <marti(at)juffo(dot)org>, Stephen Frost <sfrost(at)snowman(dot)net>, Greg Stark <stark(at)mit(dot)edu>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Thom Brown <thom(at)linux(dot)com>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: B-Tree support function number 3 (strxfrm() optimization) |
Date: | 2014-09-02 23:51:23 |
Message-ID: | CAM3SWZRfTSoz-6m9TdQPFh+A0b7KyMMHq6NkWpppjwLWAK_cRw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Tue, Sep 2, 2014 at 12:22 PM, Robert Haas <robertmhaas(at)gmail(dot)com> wrote:
> Maybe we should get rid of the tiebreak case altogether: the second
> SortSupport object is just containing all the same values as the first
> one, with only the comparator being different. Can't we just have
> both the abbreviated-comparator and authoritative-comparator as
> members of the SortSupport, and call whichever one is appropriate,
> instead of copying the whole SortSupport object? That would have the
> nice property of avoiding the need for special handling in
> reversedirection_heap().
I thought about that. I think that there are other disadvantages to
explicitly having a second comparator, associated with a the same sort
support state as the authoritative comparator: ApplySortComparator()
expects to compare using ssup->comparator(). You'd have to duplicate
that for your alternative/abbreviated comparator. It might be to our
advantage to use the same ApplySortComparator() inline comparator
muliple times in routines like comparetup_heap(), if not for clarity
then for performance (granted, that isn't something I have any
evidence for, but I wouldn't be surprised if it was noticeable). It
might also be to our advantage to have a separate work space.
By having a second comparator, you're making the leading
key/abbreviated comparison special, rather than the (hopefully) less
common tie-breaker case. I find it more logical to structure the code
such that the leading/abbreviated comparison is the "regular state",
with a tie-breaker on the "irregular"/authoritative state accessed
through indirection from the leading key state, reflecting our
preference for having most comparisons resolved using cheap
abbreviated comparisons. It's not as if I feel that strongly about it,
though.
--
Peter Geoghegan
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2014-09-03 00:18:59 | Re: Need Multixact Freezing Docs |
Previous Message | Álvaro Hernández Tortosa | 2014-09-02 23:19:57 | Re: Tips/advice for implementing integrated RESTful HTTP API |