From: | Justin Pryzby <pryzby(at)telsasoft(dot)com> |
---|---|
To: | MingJu Wu <mingjuwu0505(at)gmail(dot)com> |
Cc: | pgsql-performance(at)lists(dot)postgresql(dot)org |
Subject: | Re: Partial index creation always scans the entire table |
Date: | 2020-02-15 12:53:30 |
Message-ID: | 20200215125330.GE31889@telsasoft.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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
From | Date | Subject | |
---|---|---|---|
Next Message | Laurenz Albe | 2020-02-15 21:15:53 | Re: Partial index creation always scans the entire table |
Previous Message | Sergei Kornilov | 2020-02-15 12:47:51 | Re: Partial index creation always scans the entire table |