pgsql: Further repair of eqjoinsel ndistinct-clamping logic.
От | Tom Lane |
---|---|
Тема | pgsql: Further repair of eqjoinsel ndistinct-clamping logic. |
Дата | |
Msg-id | E1QyylT-0000mx-S1@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Further repair of eqjoinsel ndistinct-clamping logic. Examination of examples provided by Mark Kirkwood and others has convinced me that actually commit 7f3eba30c9d622d1981b1368f2d79ba0999cdff2 was quite a few bricks shy of a load. The useful part of that patch was clamping ndistinct for the inner side of a semi or anti join, and the reason why that's needed is that it's the only way that restriction clauses eliminating rows from the inner relation can affect the estimated size of the join result. I had not clearly understood why the clamping was appropriate, and so mis-extrapolated to conclude that we should clamp ndistinct for the outer side too, as well as for both sides of regular joins. These latter actions were all wrong, and are reverted with this patch. In addition, the clamping logic is now made to affect the behavior of both paths in eqjoinsel_semi, with or without MCV lists to compare. When we have MCVs, we suppose that the most common values are the ones that are most likely to survive the decimation resulting from a lower restriction clause, so we think of the clamping as eliminating non-MCV values, or potentially even the least-common MCVs for the inner relation. Back-patch to 8.4, same as previous fixes in this area. Branch ------ REL9_0_STABLE Details ------- http://git.postgresql.org/pg/commitdiff/3505862a8d3e3b389ab926346061b7135fa44f79 Modified Files -------------- src/backend/utils/adt/selfuncs.c | 108 +++++++++++++++++-------------------- 1 files changed, 50 insertions(+), 58 deletions(-)
В списке pgsql-committers по дате отправления: