pgsql: Clamp semijoin selectivity to be not more than inner-joinselect

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Clamp semijoin selectivity to be not more than inner-joinselect
Дата
Msg-id E1gQFZb-0006Hz-3J@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Clamp semijoin selectivity to be not more than inner-join selectivity.

We should never estimate the output of a semijoin to be more rows than
we estimate for an inner join with the same input rels and join condition;
it's obviously impossible for that to happen.  However, given the
relatively poor quality of our semijoin selectivity estimates ---
particularly, but not only, in cases where we punt and return a default
estimate --- we did often deliver such estimates.  To improve matters,
calculate both estimates inside eqjoinsel() and take the smaller one.

The bulk of this patch is just mechanical refactoring to avoid repetitive
information lookup when we call both eqjoinsel_semi and eqjoinsel_inner.
The actual new behavior is just

        selec = Min(selec, inner_rel->rows * selec_inner);

which looks a bit odd but is correct because of our different definitions
for inner and semi join selectivity.

There is one ensuing plan change in the regression tests, but it looks
reasonable enough (and checking the actual row counts shows that the
estimate moved closer to reality, not further away).

Per bug #15160 from Alexey Ermakov.  Although this is arguably a bug fix,
I won't risk destabilizing plan choices in stable branches by
back-patching.

Tom Lane, reviewed by Melanie Plageman

Discussion: https://postgr.es/m/152395805004.19366.3107109716821067806@wrigleys.postgresql.org

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/a314c34079cf06d05265623dd7c056f8fa9d577f

Modified Files
--------------
src/backend/utils/adt/selfuncs.c             | 254 ++++++++++++++-------------
src/test/regress/expected/partition_join.out |  23 ++-
2 files changed, 147 insertions(+), 130 deletions(-)


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

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: pgsql: Silence compiler warnings
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Add a 64-bit hash function for type citext.