Thread: [COMMITTERS] pgsql: Fix FK-based join selectivity estimation for semi/antijoins.
[COMMITTERS] pgsql: Fix FK-based join selectivity estimation for semi/antijoins.
From
Tom Lane
Date:
Fix FK-based join selectivity estimation for semi/antijoins. This case wasn't thought through sufficiently in commit 100340e2d. It's true that the FK proves that every outer row has a match in the inner table, but we forgot that some of the inner rows might be filtered away by WHERE conditions located within the semijoin's RHS. If the RHS is just one table, we can reasonably take the semijoin selectivity as equal to the fraction of the referenced table's rows that are expected to survive its restriction clauses. If the RHS is a join, it's not clear how much of the referenced table might get through the join, so fall back to the same rule we were already using for other outer-join cases: use the minimum of the regular per-clause selectivity estimates. This gives the same result as if we hadn't considered the FK at all when there's a single FK column, but it should still help for multi-column FKs, which is the case that 100340e2d is really meant to help with. Back-patch to 9.6 where the previous commit came in. Discussion: https://postgr.es/m/16149.1481835103@sss.pgh.pa.us Branch ------ REL9_6_STABLE Details ------- http://git.postgresql.org/pg/commitdiff/f4f195d15c7cefb0d6435028c23b523d671c1ec7 Modified Files -------------- src/backend/optimizer/path/costsize.c | 72 ++++++++++++++++++++++++++--------- 1 file changed, 53 insertions(+), 19 deletions(-)