@@ -113,5 +113,82 @@ SELECT count(*) FROM parallel_test_tmp t1 NATURAL JOIN parallel_test t2;
113
113
(13 rows)
114
114
115
115
RESET 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
+
116
193
RESET tempscan.enable;
117
194
DROP TABLE parallel_test, parallel_test_tmp;
0 commit comments