On Mon, Apr 13, 2026 at 10:18 AM Richard Guo <[email protected]> wrote: > For DISTINCT or GROUP BY key columns that are simple Vars, I think we > can propagate stadistinct from the base table, because the set of > distinct values is preserved after grouping. MCV frequencies, > histograms, and correlation data are not valid since GROUP BY and > DISTINCT change the frequency distribution, but with stadistinct > alone, callers like var_eq_const() can use a 1/ndistinct estimate > rather than 1/DEFAULT_NUM_DISTINCT. > > Attached is a patch to do this.
Upon self-review, I realized that stanullfrac wasn't adjusted. Since grouping collapses NULL values, we should account for that here. Attached is v2 addressing this. For a single grouping key, at most one NULL group remains, so we set it to 1 / (ndistinct + 1). With multiple grouping keys, the surviving NULL count is underdetermined, so we approximate it as zero; NULLs collapse far more aggressively than non-NULLs, so the real fraction is well below the base table's, and erring low keeps estimates on the hash-join-favoring side. - Richard
v2-0001-Propagate-stadistinct-through-GROUP-BY-DISTINCT-i.patch
Description: Binary data
