Re: Partial index creation always scans the entire table

Поиск
Список
Период
Сортировка
От Justin Pryzby
Тема Re: Partial index creation always scans the entire table
Дата
Msg-id 20200215125330.GE31889@telsasoft.com
обсуждение исходный текст
Ответ на Partial index creation always scans the entire table  (MingJu Wu <mingjuwu0505@gmail.com>)
Список pgsql-performance
On Sat, Feb 15, 2020 at 07:04:48PM +0800, MingJu Wu wrote:
> Hello,
> 
> When creating partial indexes, can postgres utilize another index for
> figuring which rows should be included in the partial index, without
> performing a full table scan?
> 
> My scenario is that I have a table with 50M rows that are categorized into
> 10K categories. I need to create a partial index for each category. I have
> created a index on the category column, hoping that postgres can use this
> information when creating the partial indexes. However, postgres always
> performs full table scan.
> 
> I've tested with PostgreSQL 12.2. Below is an example setup showing the

I don't think it's possible, and an index scan wouldn't necessarily be faster,
anyway, since the reads might be unordered rather than sequantial, and might
hit large fractions of the table even though only returning a fraction of its
tuples.

But have you thought about partitioning on category rather than partial
indexes?  Possibly hash partition of (category).  If your queries usually
include category_id=X, that might be a win for performance anyway, since tables
can now be read sequentially rather than scannned by index (again, probably out
of order).

-- 
Justin



В списке pgsql-performance по дате отправления:

Предыдущее
От: Sergei Kornilov
Дата:
Сообщение: Re: Partial index creation always scans the entire table
Следующее
От: Laurenz Albe
Дата:
Сообщение: Re: Partial index creation always scans the entire table