Обсуждение: Primary Key index with Include

Поиск
Список
Период
Сортировка

Primary Key index with Include

От
PegoraroF10
Дата:
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


Re: Primary Key index with Include

От
Adrian Klaver
Дата:
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