On Fri, May 22, 2020 at 4:40 AM David Rowley <dgrowle...@gmail.com> wrote:

> On Fri, 22 May 2020 at 07:49, Dmitry Dolgov <9erthali...@gmail.com> wrote:
> > * It seems populate_baserel_uniquekeys, which actually sets uniquekeys,
> >   is called after create_index_paths, where index skip scan already
> >   needs to use them. Is it possible to call it earlier?
>
> Seems reasonable. I originally put it after check_index_predicates().
> We need to wait until at least then so we can properly build
> UniqueKeys for partial indexes.
>
>
Looks a very valid reason,  I will add this in the next version.


> > * Do I understand correctly, that a UniqueKey would be created in a
> >   simplest case only when an index is unique? This makes it different
> >   from what was implemented for index skip scan, since there UniqueKeys
> >   also represents potential to use non-unique index to facilitate search
> >   for unique values via skipping.
>
> The way I picture the two working together is that the core UniqueKey
> patch adds UniqueKeys to RelOptInfos to allow us to have knowledge
> about what they're unique on based on the base relation's unique
> indexes.
>
For Skipscans, that patch must expand on UniqueKeys to teach Paths
> about them. I imagine we'll set some required UniqueKeys during
> standard_qp_callback() and then we'll try to create some Skip Scan
> paths (which are marked with UniqueKeys) if the base relation does not
> already have UniqueKeys that satisfy the required UniqueKeys that were
> set during standard_qp_callback().  In the future, there may be other
> reasons to create Skip Scan paths for certain rels, e.g if they're on
> the inner side of a SEMI/ANTI join, it might be useful to try those
> when planning joins.
>
>
Yes,  In current implementation, we also add UniqueKey during
create_xxx_paths,
xxx may be grouping/union.  after the index skipscan patch, we can do the
similar
things in create_indexskip_path.

-- 
Best Regards
Andy Fan

Reply via email to