Thread: Use of data within indexes

Use of data within indexes

From
Jacques Caron
Date:
Hi,

Just wondering... Is Postgresql able to use data present within indexes
without looking up the table data?

To be more explicit, let's say I have table with two fields a and b. If I
have an index on (a,b) and I do a request like "SELECT b FROM table WHERE
a=x", will Postgresql use only the index, or will it need to also read the
table page for that (those) row(s)?

There might be a reason why this is not possible (I don't know if the
indexes have all necessary transaction ID information?) but otherwise this
could possibly provide an interesting performance gain for some operations,
in particular with some types of joins. Or maybe it already does it.

Any hint welcome!

Thanks,

Jacques.



Re: Use of data within indexes

From
Christopher Kings-Lynne
Date:
> To be more explicit, let's say I have table with two fields a and b. If
> I have an index on (a,b) and I do a request like "SELECT b FROM table
> WHERE a=x", will Postgresql use only the index, or will it need to also
> read the table page for that (those) row(s)?

It must read the table because of visibility considerations.

> There might be a reason why this is not possible (I don't know if the
> indexes have all necessary transaction ID information?) but otherwise
> this could possibly provide an interesting performance gain for some
> operations, in particular with some types of joins. Or maybe it already
> does it.

It's already been thought of :)

The 4 or so columns that store visibility information are not in the
indexes, to do so would require a significant write cost.

Chris