Primary Key index with Include

Started by Marcos Pegoraroover 7 years ago2 messagesgeneral
Jump to latest
#1Marcos Pegoraro
marcos@f10.com.br

As you know version 11 gives us the possibility to include aditional columns
to an index.
So, if I recreate all my primary key indexes to contain a description
column, like ...

CREATE UNIQUE INDEX CONCURRENTLY Products_pk ON Products(Product_ID)
INCLUDE(Name);
ALTER TABLE Products ADD CONSTRAINT Products_pk PRIMARY KEY(Product_ID)
USING INDEX Products_pk

Then, when I do
select Item_ID, Product_ID, Name from Items inner join Products
using(Product_ID)

I thought It would do a index scan only for Products table, but it does not,
why ?
What do I need do to use index scan only when searching Product_ID and Name
on table Products ?

--
Sent from: http://www.postgresql-archive.org/PostgreSQL-general-f1843780.html

#2Adrian Klaver
adrian.klaver@aklaver.com
In reply to: Marcos Pegoraro (#1)
Re: Primary Key index with Include

On 11/28/18 11:55 AM, PegoraroF10 wrote:

As you know version 11 gives us the possibility to include aditional columns
to an index.
So, if I recreate all my primary key indexes to contain a description
column, like ...

CREATE UNIQUE INDEX CONCURRENTLY Products_pk ON Products(Product_ID)
INCLUDE(Name);
ALTER TABLE Products ADD CONSTRAINT Products_pk PRIMARY KEY(Product_ID)
USING INDEX Products_pk

Then, when I do
select Item_ID, Product_ID, Name from Items inner join Products
using(Product_ID)

I thought It would do a index scan only for Products table, but it does not,
why ?

Because an index is overhead and depending on the situation the planner
may determine it is better not to use it.

Post the results of:

EXPLAIN ANALYZE select Item_ID, Product_ID, Name from Items inner join
Products using(Product_ID);

That will help understand what the planner is doing.

What do I need do to use index scan only when searching Product_ID and Name
on table Products ?

--
Sent from: http://www.postgresql-archive.org/PostgreSQL-general-f1843780.html

--
Adrian Klaver
adrian.klaver@aklaver.com