On Thu, Dec 21, 2017 at 6:53 PM, David Rowley <david.row...@2ndquadrant.com> wrote: > On 22 December 2017 at 12:45, Robert Haas <robertmh...@gmail.com> wrote: >> PREPARE q3 (int, int) AS SELECT * FROM unpartitioned_table WHERE >> partkey BETWEEN $1 AND $2; >> >> ...that has to decide whether to use an index. And to do that it has >> to estimate what fraction of the table will match the BETWEEN clause. >> That may be an uninformed guess, but it guesses something. We >> probably want to do something here that makes the guess for a >> partitioned_table similar to the guess for an unpartitioned_table. > > Are you considering some sort of clauselist_selectivity() estimate on > the given parameters and comparing that to the same selectivities that > were determined for the previous custom plans?
No, I don't think comparing to previous custom plans is a workable approach. I was thinking, rather, that if we know for example that we've doing pruning on partition_column = $1, then we know that only one partition will match. That's probably a common case. If we've got partition_column > $1, we could assume that, say, 75% of the partitions would match. partition_column BETWEEN $1 and $2 is probably a bit more selective, so maybe we assume 50% of the partitions would match. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company