Re: PATCH: add support for IN and @> in functional-dependency statistics use
Dean Rasheed <dean.a.rasheed@gmail.com>
From: Dean Rasheed <dean.a.rasheed@gmail.com>
To: Tomas Vondra <tomas.vondra@2ndquadrant.com>
Cc: Pierre Ducroquet <p.psql@pinaraf.info>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2020-03-19T19:53:39Z
Lists: pgsql-hackers
Attachments
- dependencies_clauselist_selectivity-v3.patch (text/x-patch) patch v3
On Wed, 18 Mar 2020 at 00:29, Tomas Vondra <tomas.vondra@2ndquadrant.com> wrote: > > OK, I took a look. I think from the correctness POV the patch is OK, but > I think the dependencies_clauselist_selectivity() function now got a bit > too complex. I've been able to parse it now, but I'm sure I'll have > trouble in the future :-( > > Can we refactor / split it somehow and move bits of the logic to smaller > functions, or something like that? > Yeah, it has gotten a bit long. It's somewhat tricky splitting it up, because of the number of shared variables used throughout the function, but here's an updated patch splitting it into what seemed like the 2 most logical pieces. The first piece (still in dependencies_clauselist_selectivity()) works out what dependencies can/should be applied, and the second piece in a new function does the actual work of applying the list of functional dependencies to the clause list. I think that has made it easier to follow, and it has also reduced the complexity of the final "no applicable stats" branch. > Another thing I'd like to suggest is keeping the "old" formula, and > instead of just replacing it with > > P(a,b) = f * Min(P(a), P(b)) + (1-f) * P(a) * P(b) > > but explaining how the old formula may produce nonsensical selectivity, > and how the new formula addresses that issue. > I think this is purely a comment issue? I've added some more extensive comments attempting to justify the formulae. Regards, Dean
Commits
-
Prevent functional dependency estimates from exceeding column estimates.
- 87779aa47463 13.0 landed
-
Recognize some OR clauses as compatible with functional dependencies
- ccaa3569f587 13.0 landed
-
Use multi-variate MCV lists to estimate ScalarArrayOpExpr
- e83daa7e331e 13.0 landed
-
Use functional dependencies to estimate ScalarArrayOpExpr
- 8f321bd16cdb 13.0 landed