Re: Avoid full GIN index scan when possible

Julien Rouhaud <rjuju123@gmail.com>

From: Julien Rouhaud <rjuju123@gmail.com>
To: Thomas Munro <thomas.munro@gmail.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Marc Cousin <cousinmarc@gmail.com>, Alexander Korotkov <a.korotkov@postgrespro.ru>, Tomas Vondra <tomas.vondra@2ndquadrant.com>, Nikita Glukhov <n.gluhov@postgrespro.ru>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2019-08-01T10:13:24Z
Lists: pgsql-hackers

Attachments

On Thu, Aug 1, 2019 at 8:43 AM Thomas Munro <thomas.munro@gmail.com> wrote:
>
> On Wed, Jul 31, 2019 at 5:28 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
> > Meanwhile, I looked at the v3 patch, and it seems like it might not be
> > too far from committable.  I think we should *not* let this get bogged
> > down in questions of whether EXPLAIN can report which index quals were
> > used or ignored.  That's a problem that's existed for decades in the
> > btree code, with more or less zero user complaints.
> >
> > I do think v3 needs more attention to comments, for instance this
> > hunk is clearly falsifying the adjacent comment:
> >
> > @ -141,7 +141,8 @@ ginFillScanKey(GinScanOpaque so, OffsetNumber attnum,
> >         uint32          i;
> >
> >         /* Non-default search modes add one "hidden" entry to each key */
> > -       if (searchMode != GIN_SEARCH_MODE_DEFAULT)
> > +       if (searchMode != GIN_SEARCH_MODE_DEFAULT &&
> > +               (searchMode != GIN_SEARCH_MODE_ALL || nQueryValues))
> >                 nQueryValues++;
> >         key->nentries = nQueryValues;
> >         key->nuserentries = nUserQueryValues;
> >
> > Also, I agree with Julien that this
> >
> > +                       so->forcedRecheck = key->triConsistentFn(key) != GIN_TRUE;
> >
> > probably needs to be
> >
> > +                       so->forcedRecheck |= key->triConsistentFn(key) != GIN_TRUE;
>
> Ping, Julien?  Based on the above, it looks like if we had a
> last-minute patch addressing the above this could go directly to Ready
> for Committer?  I will hold off moving this one to CF2 until my
> morning.

Attached v4 that should address all comments.

Commits

  1. Avoid full scan of GIN indexes when possible