*** /Users/mark/master/postgresql/src/test/regress/expected/stats_ext.out 2017-12-19 10:42:32.000000000 -0800 --- /Users/mark/master/postgresql/src/test/regress/results/stats_ext.out 2017-12-19 10:47:45.000000000 -0800 *************** *** 608,652 **** ANALYZE mcv_lists; EXPLAIN (COSTS OFF) SELECT * FROM mcv_lists WHERE a = 1 AND b = '1'; ! QUERY PLAN ! --------------------------------------------------- ! Bitmap Heap Scan on mcv_lists ! Recheck Cond: ((a = 1) AND (b = '1'::text)) ! -> Bitmap Index Scan on mcv_lists_abc_idx ! Index Cond: ((a = 1) AND (b = '1'::text)) ! (4 rows) EXPLAIN (COSTS OFF) SELECT * FROM mcv_lists WHERE a < 1 AND b < '1'; ! QUERY PLAN ! --------------------------------------------------- ! Bitmap Heap Scan on mcv_lists ! Recheck Cond: ((a < 1) AND (b < '1'::text)) ! -> Bitmap Index Scan on mcv_lists_abc_idx ! Index Cond: ((a < 1) AND (b < '1'::text)) ! (4 rows) EXPLAIN (COSTS OFF) SELECT * FROM mcv_lists WHERE a = 1 AND b = '1' AND c = 1; ! QUERY PLAN ! --------------------------------------------------- ! Bitmap Heap Scan on mcv_lists ! Recheck Cond: ((a = 1) AND (b = '1'::text)) ! Filter: (c = 1) ! -> Bitmap Index Scan on mcv_lists_ab_idx ! Index Cond: ((a = 1) AND (b = '1'::text)) ! (5 rows) EXPLAIN (COSTS OFF) SELECT * FROM mcv_lists WHERE a < 5 AND b < '1' AND c < 5; ! QUERY PLAN ! --------------------------------------------------- ! Bitmap Heap Scan on mcv_lists ! Recheck Cond: ((a < 5) AND (b < '1'::text)) Filter: (c < 5) ! -> Bitmap Index Scan on mcv_lists_ab_idx ! Index Cond: ((a < 5) AND (b < '1'::text)) ! (5 rows) -- check change of column type resets the MCV statistics ALTER TABLE mcv_lists ALTER COLUMN c TYPE numeric; --- 608,643 ---- ANALYZE mcv_lists; EXPLAIN (COSTS OFF) SELECT * FROM mcv_lists WHERE a = 1 AND b = '1'; ! QUERY PLAN ! ------------------------------------------------- ! Index Scan using mcv_lists_abc_idx on mcv_lists ! Index Cond: ((a = 1) AND (b = '1'::text)) ! (2 rows) EXPLAIN (COSTS OFF) SELECT * FROM mcv_lists WHERE a < 1 AND b < '1'; ! QUERY PLAN ! ------------------------------------------------- ! Index Scan using mcv_lists_abc_idx on mcv_lists ! Index Cond: ((a < 1) AND (b < '1'::text)) ! (2 rows) EXPLAIN (COSTS OFF) SELECT * FROM mcv_lists WHERE a = 1 AND b = '1' AND c = 1; ! QUERY PLAN ! --------------------------------------------------------- ! Index Scan using mcv_lists_abc_idx on mcv_lists ! Index Cond: ((a = 1) AND (b = '1'::text) AND (c = 1)) ! (2 rows) EXPLAIN (COSTS OFF) SELECT * FROM mcv_lists WHERE a < 5 AND b < '1' AND c < 5; ! QUERY PLAN ! ------------------------------------------------ ! Index Scan using mcv_lists_ab_idx on mcv_lists ! Index Cond: ((a < 5) AND (b < '1'::text)) Filter: (c < 5) ! (3 rows) -- check change of column type resets the MCV statistics ALTER TABLE mcv_lists ALTER COLUMN c TYPE numeric; *************** *** 661,673 **** ANALYZE mcv_lists; EXPLAIN (COSTS OFF) SELECT * FROM mcv_lists WHERE a = 1 AND b = '1'; ! QUERY PLAN ! --------------------------------------------------- ! Bitmap Heap Scan on mcv_lists ! Recheck Cond: ((a = 1) AND (b = '1'::text)) ! -> Bitmap Index Scan on mcv_lists_abc_idx ! Index Cond: ((a = 1) AND (b = '1'::text)) ! (4 rows) -- 100 distinct combinations with NULL values, all in the MCV list TRUNCATE mcv_lists; --- 652,662 ---- ANALYZE mcv_lists; EXPLAIN (COSTS OFF) SELECT * FROM mcv_lists WHERE a = 1 AND b = '1'; ! QUERY PLAN ! ------------------------------------------------- ! Index Scan using mcv_lists_abc_idx on mcv_lists ! Index Cond: ((a = 1) AND (b = '1'::text)) ! (2 rows) -- 100 distinct combinations with NULL values, all in the MCV list TRUNCATE mcv_lists; *************** *** 702,725 **** ANALYZE mcv_lists; EXPLAIN (COSTS OFF) SELECT * FROM mcv_lists WHERE a IS NULL AND b IS NULL; ! QUERY PLAN ! --------------------------------------------------- ! Bitmap Heap Scan on mcv_lists ! Recheck Cond: ((a IS NULL) AND (b IS NULL)) ! -> Bitmap Index Scan on mcv_lists_abc_idx ! Index Cond: ((a IS NULL) AND (b IS NULL)) ! (4 rows) EXPLAIN (COSTS OFF) SELECT * FROM mcv_lists WHERE a IS NULL AND b IS NULL AND c IS NULL; ! QUERY PLAN ! --------------------------------------------------- ! Bitmap Heap Scan on mcv_lists ! Recheck Cond: ((a IS NULL) AND (b IS NULL)) Filter: (c IS NULL) ! -> Bitmap Index Scan on mcv_lists_ab_idx ! Index Cond: ((a IS NULL) AND (b IS NULL)) ! (5 rows) -- mcv with arrays CREATE TABLE mcv_lists_arrays ( --- 691,710 ---- ANALYZE mcv_lists; EXPLAIN (COSTS OFF) SELECT * FROM mcv_lists WHERE a IS NULL AND b IS NULL; ! QUERY PLAN ! ------------------------------------------------- ! Index Scan using mcv_lists_abc_idx on mcv_lists ! Index Cond: ((a IS NULL) AND (b IS NULL)) ! (2 rows) EXPLAIN (COSTS OFF) SELECT * FROM mcv_lists WHERE a IS NULL AND b IS NULL AND c IS NULL; ! QUERY PLAN ! ------------------------------------------------ ! Index Scan using mcv_lists_ab_idx on mcv_lists ! Index Cond: ((a IS NULL) AND (b IS NULL)) Filter: (c IS NULL) ! (3 rows) -- mcv with arrays CREATE TABLE mcv_lists_arrays ( *************** *** 790,802 **** EXPLAIN (COSTS OFF) SELECT * FROM histograms WHERE a < 5 AND b < '5' AND c < 5; ! QUERY PLAN ! --------------------------------------------------------------- ! Bitmap Heap Scan on histograms ! Recheck Cond: ((a < 5) AND (b < '5'::text) AND (c < 5)) ! -> Bitmap Index Scan on histograms_abc_idx ! Index Cond: ((a < 5) AND (b < '5'::text) AND (c < 5)) ! (4 rows) -- values correlated along the diagonal TRUNCATE histograms; --- 775,785 ---- EXPLAIN (COSTS OFF) SELECT * FROM histograms WHERE a < 5 AND b < '5' AND c < 5; ! QUERY PLAN ! --------------------------------------------------------- ! Index Scan using histograms_abc_idx on histograms ! Index Cond: ((a < 5) AND (b < '5'::text) AND (c < 5)) ! (2 rows) -- values correlated along the diagonal TRUNCATE histograms; *************** *** 825,847 **** ANALYZE histograms; EXPLAIN (COSTS OFF) SELECT * FROM histograms WHERE a < 3 AND c < 3; ! QUERY PLAN ! ----------------------------------------------- ! Bitmap Heap Scan on histograms ! Recheck Cond: ((a < 3) AND (c < 3)) ! -> Bitmap Index Scan on histograms_abc_idx ! Index Cond: ((a < 3) AND (c < 3)) ! (4 rows) EXPLAIN (COSTS OFF) SELECT * FROM histograms WHERE a < 3 AND b > '2' AND c < 3; ! QUERY PLAN ! --------------------------------------------------------------- ! Bitmap Heap Scan on histograms ! Recheck Cond: ((a < 3) AND (b > '2'::text) AND (c < 3)) ! -> Bitmap Index Scan on histograms_abc_idx ! Index Cond: ((a < 3) AND (b > '2'::text) AND (c < 3)) ! (4 rows) -- almost 5000 unique combinations with NULL values TRUNCATE histograms; --- 808,826 ---- ANALYZE histograms; EXPLAIN (COSTS OFF) SELECT * FROM histograms WHERE a < 3 AND c < 3; ! QUERY PLAN ! --------------------------------------------------- ! Index Scan using histograms_abc_idx on histograms ! Index Cond: ((a < 3) AND (c < 3)) ! (2 rows) EXPLAIN (COSTS OFF) SELECT * FROM histograms WHERE a < 3 AND b > '2' AND c < 3; ! QUERY PLAN ! --------------------------------------------------------- ! Index Scan using histograms_abc_idx on histograms ! Index Cond: ((a < 3) AND (b > '2'::text) AND (c < 3)) ! (2 rows) -- almost 5000 unique combinations with NULL values TRUNCATE histograms; *************** *** 877,897 **** SELECT * FROM histograms WHERE a IS NULL AND b IS NULL; QUERY PLAN --------------------------------------------------- ! Bitmap Heap Scan on histograms ! Recheck Cond: ((a IS NULL) AND (b IS NULL)) ! -> Bitmap Index Scan on histograms_abc_idx ! Index Cond: ((a IS NULL) AND (b IS NULL)) ! (4 rows) EXPLAIN (COSTS OFF) SELECT * FROM histograms WHERE a IS NULL AND b IS NULL AND c IS NULL; ! QUERY PLAN ! ------------------------------------------------------------------- ! Bitmap Heap Scan on histograms ! Recheck Cond: ((a IS NULL) AND (b IS NULL) AND (c IS NULL)) ! -> Bitmap Index Scan on histograms_abc_idx ! Index Cond: ((a IS NULL) AND (b IS NULL) AND (c IS NULL)) ! (4 rows) -- check change of column type resets the histogram statistics ALTER TABLE histograms ALTER COLUMN c TYPE numeric; --- 856,872 ---- SELECT * FROM histograms WHERE a IS NULL AND b IS NULL; QUERY PLAN --------------------------------------------------- ! Index Scan using histograms_abc_idx on histograms ! Index Cond: ((a IS NULL) AND (b IS NULL)) ! (2 rows) EXPLAIN (COSTS OFF) SELECT * FROM histograms WHERE a IS NULL AND b IS NULL AND c IS NULL; ! QUERY PLAN ! ------------------------------------------------------------- ! Index Scan using histograms_abc_idx on histograms ! Index Cond: ((a IS NULL) AND (b IS NULL) AND (c IS NULL)) ! (2 rows) -- check change of column type resets the histogram statistics ALTER TABLE histograms ALTER COLUMN c TYPE numeric; *************** *** 908,918 **** SELECT * FROM histograms WHERE a IS NULL AND b IS NULL; QUERY PLAN --------------------------------------------------- ! Bitmap Heap Scan on histograms ! Recheck Cond: ((a IS NULL) AND (b IS NULL)) ! -> Bitmap Index Scan on histograms_abc_idx ! Index Cond: ((a IS NULL) AND (b IS NULL)) ! (4 rows) -- histograms with arrays CREATE TABLE histograms_arrays ( --- 883,891 ---- SELECT * FROM histograms WHERE a IS NULL AND b IS NULL; QUERY PLAN --------------------------------------------------- ! Index Scan using histograms_abc_idx on histograms ! Index Cond: ((a IS NULL) AND (b IS NULL)) ! (2 rows) -- histograms with arrays CREATE TABLE histograms_arrays ( ======================================================================