Re: [HACKERS] OR with multi-key indexes

From: Vadim Mikheev <vadim(at)krs(dot)ru>
To: Bruce Momjian <maillist(at)candle(dot)pha(dot)pa(dot)us>
Cc: hackers(at)postgreSQL(dot)org
Subject: Re: [HACKERS] OR with multi-key indexes
Date: 1998-08-03 06:19:26
Message-ID: 35C5566E.25583E13@krs.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Bruce Momjian wrote:
>
> > > > II. Extend multi-key indexing: (y = 1 or y = 2) could be
> > > > qualified by index access methods itself because of Y is
> > > > one of index keys. Only first key would be used for finding
> > > > index tuples but additional qualification could decrease
> > > > number of heap_fetch calls and this would be nice!
> > >
> > > > This feature would be also usefull for:
> > > >
> > > > create index on table (a,b,c);
> > > > select * from table where a = 1 and c = 2;
> > > > ^^^^^
> > > > additional qualification would be performed on index level
> > > >
> > > > Personally, I would like to see II implemented first because
> > > > of it works for both query examples.
> > >
> > > Doesn't the existing code already use both keys in the above query.
> > > What is gained by moving this to the index access methods?
> >
> > I hadn't time to implement this year ago...
> >
> > Let's say we have 1000 tuples with a = 1 and only 10 with
> > a = 1 and c = 2 - currently, all 1000 index tuples will be returned
> > to Executor and all corresponding 1000 heap tuples will be fetched...
> > Having this feature, only 10 index tuples would be returned
> > and heap_fetch would be called 10 times only.
>
> OK, stupid question, but why do we have multi-key indexes then? Just to
> allow UNIQUE index failure?

In the example above only 1st and _3rd_ index keys are used
in WHERE and so only 1st key will be used by index.
For cases like WHERE a = 1 and b = 3 index will use
1st and 2nd keys.
For cases like WHERE a = 1 and b = 3 and c = 2 index will use
all three keys.

Extending II means not using 3rd key to _find_ index tuples
but using 3rd key to reduce # of index tuples returned
to executor. Btree will read all tuples with a = 3 but
will not return index tuple with a = 3 and c = 0 (ie).

Vadim

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Maarten Boekhold 1998-08-03 06:30:17 Re: [INTERFACES] Re: [HACKERS] User authentication bug?
Previous Message Bruce Momjian 1998-08-03 06:02:52 Re: [HACKERS] OR with multi-key indexes