pgsql: Improve planner's handling of set-returning functions ingroupin
От | Tom Lane |
---|---|
Тема | pgsql: Improve planner's handling of set-returning functions ingroupin |
Дата | |
Msg-id | E1eIdcm-0003a1-9N@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Improve planner's handling of set-returning functions in grouping columns. Improve query_is_distinct_for() to accept SRFs in the targetlist when we can prove distinctness from a DISTINCT clause. In that case the de-duplication will surely happen after SRF expansion, so the proof still works. Continue to punt in the case where we'd try to prove distinctness from GROUP BY (or, in the future, source relations). To do that, we'd have to determine whether the SRFs were in the grouping columns or elsewhere in the tlist, and it still doesn't seem worth the trouble. But this trivial change allows us to recognize that "SELECT DISTINCT unnest(foo) FROM ..." produces unique-ified output, which seems worth having. Also, fix estimate_num_groups() to consider the possibility of SRFs in the grouping columns. Its failure to do so was masked before v10 because grouping_planner() scaled up plan rowcount estimates by the estimated SRF multiplier after performing grouping. That doesn't happen anymore, which is more correct, but it means we need an adjustment in the estimate for the number of groups. Failure to do this leads to an underestimate for the number of output rows of subqueries like "SELECT DISTINCT unnest(foo)" compared to what 9.6 and earlier estimated, thus breaking plan choices in some cases. Per report from Dmitry Shalashov. Back-patch to v10 to avoid degraded plan choices compared to previous releases. Discussion: https://postgr.es/m/CAKPeCUGAeHgoh5O=SvcQxREVkoX7UdeJUMj1F5=aBNvoTa+O8w@mail.gmail.com Branch ------ REL_10_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/b9fc2d0b97c122b071e4ce99ba4e274538d81a5b Modified Files -------------- src/backend/optimizer/plan/analyzejoins.c | 28 ++++++++++++++-------------- src/backend/utils/adt/selfuncs.c | 27 +++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 14 deletions(-)
В списке pgsql-committers по дате отправления: