RE: Access plan selection logic PG9.2 -> PG14 - Mailing list pgsql-general

From Ryo Yamaji (Fujitsu)
Subject RE: Access plan selection logic PG9.2 -> PG14
Date
Msg-id TYAPR01MB6073FD73C263D1B8D67122FF8AF6A@TYAPR01MB6073.jpnprd01.prod.outlook.com
Whole thread Raw
In response to Re: Access plan selection logic PG9.2 -> PG14  (David Rowley <dgrowleyml@gmail.com>)
Responses Re: Access plan selection logic PG9.2 -> PG14  (David Rowley <dgrowleyml@gmail.com>)
List pgsql-general
on Thu, 14 Sept 2023 at 23:43, David Rowley <dgrowleyml@gmail.com> wrote:
> This likely is due to the query planner not giving any preference to the index that allows more quals to go into the
indexcondition.  Once the selectivity estimate gets as low as 1 row then the costs between each index don't vary very
much.It's possible the PK index didn't come out any cheaper, or that add_path() saw the costs as (fuzzily) the same.
 

I understand that this is just a cost estimate, not a check to see if the SQL condition matches the index. 
Thank you for telling me.

> Does v14 run faster if you force the tbl_pkey to be used? (perhaps you could do that just by dropping the other index
ifyou're using a test instance that's not needed by anyone else).
 

The following example shows a table with 1 million tuples:
* The cost of using PK was higher than the cost of using user index.
* It was faster to use PK.

 Index Scan using tbl_ix1 on tbl  (cost=0.43..0.67 rows=1 width=61) (actual time=0.016..185.013 rows=1 loops=1)
   Index Cond: (((a)::text = '1000000000'::text) AND ((b)::text = '1000000000'::text) AND ((c)::text =
'1000000000'::text)AND ((d)::text = '1000000000'::text) AND (h = 1))
 
   Filter: ((e)::text = '1000000000'::text)
   Rows Removed by Filter: 1000000
 Planning Time: 0.407 ms
 Execution Time: 185.031 ms

 Index Only Scan using tbl_pkey on tbl  (cost=0.56..0.79 rows=1 width=61) (actual time=0.026..0.028 rows=1 loops=1)
   Index Cond: ((a = '1000000000'::text) AND (b = '1000000000'::text) AND (c = '1000000000'::text) AND (d =
'1000000000'::text)AND (e = '1000000000'::text) AND (h = 1))
 
   Heap Fetches: 1
 Planning Time: 0.355 ms
 Execution Time: 0.043 ms

I should probably configure the statistics to account for changes in planner behavior.
Therefore, I will consider appropriate measures.


Regards, Ryo

pgsql-general by date:

Previous
From: SMITH Matt
Date:
Subject: RE: Help with PostgreSQL Upgrade
Next
From: "Ryo Yamaji (Fujitsu)"
Date:
Subject: RE: Access plan selection logic PG9.2 -> PG14