Distinct on is working really well!  If I need to be able to index something
I might start thinking along those lines.

On Fri, Jan 21, 2011 at 12:13 PM, Robert Haas <robertmh...@gmail.com> wrote:

> On Fri, Jan 14, 2011 at 8:50 PM, Nikolas Everett <nik9...@gmail.com>
> wrote:
> >
> >
> > On Fri, Jan 14, 2011 at 7:59 PM, Kevin Grittner
> > <kevin.gritt...@wicourts.gov> wrote:
> >>
> >> Tom Lane <t...@sss.pgh.pa.us> wrote:
> >>
> >> > Shaun's example is a bit off
> >>
> >> > As for speed, either one might be faster in a particular
> >> > situation.
> >>
> >> After fixing a mistake in my testing and learning from Tom's example
> >> I generated queries against the OP's test data which produce
> >> identical results, and I'm finding no significant difference between
> >> run times for the two versions.  The OP should definitely try both
> >> against the real tables.
> >>
> > <snip>
> >>
> >> -Kevin
> >
> > After trying both against the real tables DISTINCT ON seems to be about
> two
> > orders of magnitude faster than the other options.
>
> What I've often done in these situations is add a Boolean to the table
> that defaults to true, and an ON INSERT trigger that flips the Boolean
> for any existing row with the same key to false.  Then you can just do
> something like "SELECT * FROM tab WHERE latest".  And you can create
> partial indexes etc: CREATE INDEX foo ON tab (a) WHERE latest.
>
> Although if using DISTINCT ON is working, no reason to do anything
> more complicated.
>
> --
> Robert Haas
> EnterpriseDB: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>

Reply via email to