Re: PoC/WIP: Extended statistics on expressions
Tomas Vondra <tomas.vondra@enterprisedb.com>
From: Tomas Vondra <tomas.vondra@enterprisedb.com>
To: Dean Rasheed <dean.a.rasheed@gmail.com>
Cc: Justin Pryzby <pryzby@telsasoft.com>,
pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2020-12-11T20:17:40Z
Lists: pgsql-hackers
Attachments
- 0001-bootstrap-convert-Typ-to-a-List-20201211.patch (text/x-patch)
On 12/11/20 1:58 PM, Dean Rasheed wrote: > On Tue, 8 Dec 2020 at 12:44, Tomas Vondra <tomas.vondra@enterprisedb.com> wrote: >> >> Possibly. But I don't think it's worth the extra complexity. I don't >> expect people to have a lot of overlapping stats, so the amount of >> wasted space and CPU time is expected to be fairly limited. >> >> So I don't think it's worth spending too much time on this now. Let's >> just do what you proposed, and revisit this later if needed. >> > > Yes, I think that's a reasonable approach to take. As long as the > documentation makes it clear that building MCV stats also causes > standard expression stats to be built on any expressions included in > the list, then the user will know and can avoid duplication most of > the time. I don't think there's any need for code to try to prevent > that -- just as we don't bother with code to prevent a user building > multiple indexes on the same column. > > The only case where duplication won't be avoidable is where there are > multiple MCV stats sharing the same expression, but that's probably > quite unlikely in practice, and it seems acceptable to leave improving > that as a possible future optimisation. > OK. Attached is an updated version, reworking it this way. I tried tweaking the grammar to differentiate these two syntax variants, but that led to shift/reduce conflicts with the existing ones. I tried fixing that, but I ended up doing that in CreateStatistics(). The other thing is that we probably can't tie this to just MCV, because functional dependencies need the per-expression stats too. So I simply build expression stats whenever there's at least one expression. I also decided to keep the "expressions" statistics kind - it's not allowed to specify it in CREATE STATISTICS, but it's useful internally as it allows deciding whether to build the stats in a single place. Otherwise we'd need to do that every time we build the statistics, etc. I added a brief explanation to the sgml docs, not sure if that's good enough - maybe it needs more details. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Commits
-
Disallow extended statistics on system columns
- 66061077155d 14.0 landed
- c9eeef2a15c0 15.0 landed
-
Identify simple column references in extended statistics
- 50ba70a957f9 14.0 landed
- 537ca68dbb24 15.0 landed
-
Don't print extra parens around expressions in extended stats
- 4d1816ec26e8 14.0 landed
- 13380e147649 15.0 landed
-
Change position of field "transformed" in struct CreateStatsStmt.
- 13a1ca160dcf 14.0 landed
-
Add transformed flag to nodes/*funcs.c for CREATE STATISTICS
- d57ecebd128c 14.0 landed
-
Stabilize stats_ext test with other collations
- 2a058e938c73 14.0 landed
-
Extended statistics on expressions
- a4d75c86bf15 14.0 landed
-
Reduce duration of stats_ext regression tests
- 98376c18f12e 14.0 landed
-
Allow composite types in catalog bootstrap
- 79f6a942bdb9 14.0 landed
-
Convert Typ from array to list in bootstrap
- e1a5e65703ce 14.0 landed
-
Disallow CREATE STATISTICS on system catalogs
- c22539756ee5 10.16 landed
- f52db969440b 11.11 landed
- 943a113bcb6f 12.6 landed
- d26d4c717dbf 13.2 landed
- c9a0dc34865f 14.0 landed