Change the division of labor between grouping_planner and query_planner
Tom Lane <tgl@sss.pgh.pa.us>
Change the division of labor between grouping_planner and query_planner so that the latter estimates the number of groups that grouping will produce. This is needed because it is primarily query_planner that makes the decision between fast-start and fast-finish plans, and in the original coding it was unable to make more than a crude rule-of-thumb choice when the query involved grouping. This revision helps us make saner choices for queries like SELECT ... GROUP BY ... LIMIT, as in a recent example from Mark Kirkwood. Also move the responsibility for canonicalizing sort_pathkeys and group_pathkeys into query_planner; this information has to be available anyway to support the first change, and doing it this way lets us get rid of compare_noncanonical_pathkeys entirely.
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/nodes/outfuncs.c | modified | +4 −1 |
| src/backend/optimizer/path/pathkeys.c | modified | +1 −67 |
| src/backend/optimizer/plan/planmain.c | modified | +98 −10 |
| src/backend/optimizer/plan/planner.c | modified | +32 −120 |
| src/include/nodes/relation.h | modified | +4 −1 |
| src/include/optimizer/paths.h | modified | +1 −4 |
| src/include/optimizer/planmain.h | modified | +3 −2 |