@@ -113,5 +113,82 @@ SELECT count(*) FROM parallel_test_tmp t1 NATURAL JOIN parallel_test t2;
113113(13 rows)
114114
115115RESET enable_hashjoin;
116+ -- Increase table size and see how indexes work
117+ ALTER TABLE parallel_test ADD COLUMN y text DEFAULT 'none';
118+ INSERT INTO parallel_test (x,y) SELECT x, 'data' || x AS y FROM generate_series(1,10000) AS x;
119+ CREATE INDEX ON parallel_test (x);
120+ ANALYZE parallel_test;
121+ EXPLAIN (COSTS OFF)
122+ SELECT count(*) FROM parallel_test t1 NATURAL JOIN parallel_test t2
123+ WHERE t1.x < 10;
124+ QUERY PLAN
125+ -------------------------------------------------------------------------------------
126+ Aggregate
127+ -> Gather
128+ Workers Planned: 1
129+ -> Nested Loop
130+ -> Parallel Index Scan using parallel_test_x_idx on parallel_test t1
131+ Index Cond: (x < 10)
132+ -> Index Scan using parallel_test_x_idx on parallel_test t2
133+ Index Cond: (x = t1.x)
134+ Filter: (y = t1.y)
135+ (9 rows)
136+
137+ EXPLAIN (COSTS OFF)
138+ SELECT count(*) FROM parallel_test t1 NATURAL JOIN parallel_test_tmp t2
139+ WHERE t1.x < 10;
140+ QUERY PLAN
141+ ---------------------------------------------------------------------------------
142+ Aggregate
143+ -> Gather
144+ Workers Planned: 1
145+ -> Merge Join
146+ Merge Cond: (t2.x = t1.x)
147+ -> Sort
148+ Sort Key: t2.x
149+ -> Custom Scan (nodeCustomTempScan)
150+ -> Parallel Seq Scan on parallel_test_tmp t2
151+ -> Index Only Scan using parallel_test_x_idx on parallel_test t1
152+ Index Cond: (x < 10)
153+ (11 rows)
154+
155+ CREATE TEMP TABLE parallel_test_tmp_2 AS (SELECT * FROM parallel_test);
156+ CREATE INDEX ON parallel_test_tmp_2 (x);
157+ ANALYZE parallel_test_tmp_2;
158+ EXPLAIN (COSTS OFF)
159+ SELECT count(*) FROM parallel_test_tmp t1 NATURAL JOIN parallel_test_tmp_2 t2
160+ WHERE t2.x < 10;
161+ QUERY PLAN
162+ ---------------------------------------------------------------------------------------------
163+ Aggregate
164+ -> Gather
165+ Workers Planned: 1
166+ -> Merge Join
167+ Merge Cond: (t1.x = t2.x)
168+ -> Sort
169+ Sort Key: t1.x
170+ -> Custom Scan (nodeCustomTempScan)
171+ -> Parallel Seq Scan on parallel_test_tmp t1
172+ -> Index Only Scan using parallel_test_tmp_2_x_idx on parallel_test_tmp_2 t2
173+ Index Cond: (x < 10)
174+ (11 rows)
175+
176+ EXPLAIN (COSTS OFF)
177+ SELECT count(*) FROM parallel_test_tmp_2 t1 NATURAL JOIN parallel_test_tmp_2 t2
178+ WHERE t1.x < 10;
179+ QUERY PLAN
180+ -------------------------------------------------------------------------------------------------------
181+ Aggregate
182+ -> Gather
183+ Workers Planned: 1
184+ -> Nested Loop
185+ -> Custom Scan (nodeCustomTempScan)
186+ -> Parallel Index Scan using parallel_test_tmp_2_x_idx on parallel_test_tmp_2 t1
187+ Index Cond: (x < 10)
188+ -> Index Scan using parallel_test_tmp_2_x_idx on parallel_test_tmp_2 t2
189+ Index Cond: (x = t1.x)
190+ Filter: (y = t1.y)
191+ (10 rows)
192+
116193RESET tempscan.enable;
117194DROP TABLE parallel_test, parallel_test_tmp;
0 commit comments