@@ -2735,100 +2735,100 @@ CREATE TABLE btg AS SELECT
27352735 'abc' || i % 10 AS z,
27362736 i AS w
27372737FROM generate_series(1,10000) AS i;
2738- CREATE INDEX abc ON btg(x,y);
2738+ CREATE INDEX btg_x_y_idx ON btg(x,y);
27392739ANALYZE btg;
27402740-- GROUP BY optimization by reorder columns by frequency
27412741SET enable_hashagg=off;
27422742SET max_parallel_workers= 0;
27432743SET max_parallel_workers_per_gather = 0;
27442744-- Utilize index scan ordering to avoid a Sort operation
27452745EXPLAIN (COSTS OFF) SELECT count(*) FROM btg GROUP BY x,y;
2746- QUERY PLAN
2747- ----------------------------------------
2746+ QUERY PLAN
2747+ ------------------------------------------------
27482748 GroupAggregate
27492749 Group Key: x, y
2750- -> Index Only Scan using abc on btg
2750+ -> Index Only Scan using btg_x_y_idx on btg
27512751(3 rows)
27522752
27532753EXPLAIN (COSTS OFF) SELECT count(*) FROM btg GROUP BY y,x;
2754- QUERY PLAN
2755- ----------------------------------------
2754+ QUERY PLAN
2755+ ------------------------------------------------
27562756 GroupAggregate
27572757 Group Key: x, y
2758- -> Index Only Scan using abc on btg
2758+ -> Index Only Scan using btg_x_y_idx on btg
27592759(3 rows)
27602760
27612761-- Engage incremental sort
27622762explain (COSTS OFF) SELECT x,y FROM btg GROUP BY x,y,z,w;
2763- QUERY PLAN
2764- -----------------------------------------
2763+ QUERY PLAN
2764+ -------------------------------------------------
27652765 Group
27662766 Group Key: x, y, z, w
27672767 -> Incremental Sort
27682768 Sort Key: x, y, z, w
27692769 Presorted Key: x, y
2770- -> Index Scan using abc on btg
2770+ -> Index Scan using btg_x_y_idx on btg
27712771(6 rows)
27722772
27732773explain (COSTS OFF) SELECT x,y FROM btg GROUP BY z,y,w,x;
2774- QUERY PLAN
2775- -----------------------------------------
2774+ QUERY PLAN
2775+ -------------------------------------------------
27762776 Group
27772777 Group Key: x, y, z, w
27782778 -> Incremental Sort
27792779 Sort Key: x, y, z, w
27802780 Presorted Key: x, y
2781- -> Index Scan using abc on btg
2781+ -> Index Scan using btg_x_y_idx on btg
27822782(6 rows)
27832783
27842784explain (COSTS OFF) SELECT x,y FROM btg GROUP BY w,z,x,y;
2785- QUERY PLAN
2786- -----------------------------------------
2785+ QUERY PLAN
2786+ -------------------------------------------------
27872787 Group
27882788 Group Key: x, y, w, z
27892789 -> Incremental Sort
27902790 Sort Key: x, y, w, z
27912791 Presorted Key: x, y
2792- -> Index Scan using abc on btg
2792+ -> Index Scan using btg_x_y_idx on btg
27932793(6 rows)
27942794
27952795explain (COSTS OFF) SELECT x,y FROM btg GROUP BY w,x,z,y;
2796- QUERY PLAN
2797- -----------------------------------------
2796+ QUERY PLAN
2797+ -------------------------------------------------
27982798 Group
27992799 Group Key: x, y, w, z
28002800 -> Incremental Sort
28012801 Sort Key: x, y, w, z
28022802 Presorted Key: x, y
2803- -> Index Scan using abc on btg
2803+ -> Index Scan using btg_x_y_idx on btg
28042804(6 rows)
28052805
28062806-- Subqueries
28072807explain (COSTS OFF) SELECT x,y
28082808FROM (SELECT * FROM btg ORDER BY x,y,w,z) AS q1
28092809GROUP BY (w,x,z,y);
2810- QUERY PLAN
2811- ----------------------------------------------
2810+ QUERY PLAN
2811+ -------------------------------------------------
28122812 Group
28132813 Group Key: btg.x, btg.y, btg.w, btg.z
28142814 -> Incremental Sort
28152815 Sort Key: btg.x, btg.y, btg.w, btg.z
28162816 Presorted Key: btg.x, btg.y
2817- -> Index Scan using abc on btg
2817+ -> Index Scan using btg_x_y_idx on btg
28182818(6 rows)
28192819
28202820explain (COSTS OFF) SELECT x,y
28212821FROM (SELECT * FROM btg ORDER BY x,y,w,z LIMIT 100) AS q1
28222822GROUP BY (w,x,z,y);
2823- QUERY PLAN
2824- ----------------------------------------------------
2823+ QUERY PLAN
2824+ -------------------------------------------------------
28252825 Group
28262826 Group Key: btg.x, btg.y, btg.w, btg.z
28272827 -> Limit
28282828 -> Incremental Sort
28292829 Sort Key: btg.x, btg.y, btg.w, btg.z
28302830 Presorted Key: btg.x, btg.y
2831- -> Index Scan using abc on btg
2831+ -> Index Scan using btg_x_y_idx on btg
28322832(7 rows)
28332833
28342834-- Should work with and without GROUP-BY optimization
@@ -2844,16 +2844,16 @@ explain (COSTS OFF) SELECT x,y FROM btg GROUP BY w,x,z,y ORDER BY y,x,z,w;
28442844
28452845-- Utilize incremental sort to make the ORDER BY rule a bit cheaper
28462846explain (COSTS OFF) SELECT x,w FROM btg GROUP BY w,x,y,z ORDER BY x*x,z;
2847- QUERY PLAN
2848- -----------------------------------------------
2847+ QUERY PLAN
2848+ -------------------------------------------------------
28492849 Sort
28502850 Sort Key: ((x * x)), z
28512851 -> Group
28522852 Group Key: x, y, w, z
28532853 -> Incremental Sort
28542854 Sort Key: x, y, w, z
28552855 Presorted Key: x, y
2856- -> Index Scan using abc on btg
2856+ -> Index Scan using btg_x_y_idx on btg
28572857(8 rows)
28582858
28592859SET enable_incremental_sort = off;
0 commit comments