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