@@ -169,6 +169,8 @@ FOR SHARE;
169
169
(1 row)
170
170
171
171
/* Check updates (plan) */
172
+ SET enable_hashjoin = f; /* Hash Semi Join on 10 vs Hash Join on 9.6 */
173
+ SET enable_mergejoin = f; /* Merge Semi Join on 10 vs Merge Join on 9.6 */
172
174
EXPLAIN (COSTS OFF)
173
175
UPDATE rowmarks.second SET id = 2
174
176
WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1);
@@ -187,38 +189,38 @@ WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1);
187
189
EXPLAIN (COSTS OFF)
188
190
UPDATE rowmarks.second SET id = 2
189
191
WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id < 1);
190
- QUERY PLAN
191
- ---------------------------------------------------
192
+ QUERY PLAN
193
+ -----------------------------------------------
192
194
Update on second
193
- -> Hash Join
194
- Hash Cond : (second.id = first_0.id)
195
- -> Seq Scan on second
196
- -> Hash
197
- -> HashAggregate
198
- Group Key: first_0.id
199
- -> Append
200
- -> Seq Scan on first_0
201
- Filter: (id < 1)
202
- -> Seq Scan on first_1
203
- Filter: (id < 1)
204
- -> Seq Scan on first_2
205
- Filter: (id < 1)
206
- -> Seq Scan on first_3
207
- Filter: (id < 1)
208
- -> Seq Scan on first_4
209
- Filter: (id < 1)
195
+ -> Nested Loop
196
+ Join Filter : (second.id = first_0.id)
197
+ -> HashAggregate
198
+ Group Key: first_0.id
199
+ -> Append
200
+ -> Seq Scan on first_0
201
+ Filter: (id < 1)
202
+ -> Seq Scan on first_1
203
+ Filter: (id < 1)
204
+ -> Seq Scan on first_2
205
+ Filter: (id < 1)
206
+ -> Seq Scan on first_3
207
+ Filter: (id < 1)
208
+ -> Seq Scan on first_4
209
+ Filter: (id < 1)
210
+ -> Materialize
211
+ -> Seq Scan on second
210
212
(18 rows)
211
213
212
214
EXPLAIN (COSTS OFF)
213
215
UPDATE rowmarks.second SET id = 2
214
216
WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1 OR id = 2);
215
- QUERY PLAN
216
- ---------------------------------------------
217
+ QUERY PLAN
218
+ -----------------------------------------------
217
219
Update on second
218
- -> Hash Semi Join
219
- Hash Cond : (second.id = first_0.id)
220
+ -> Nested Loop Semi Join
221
+ Join Filter : (second.id = first_0.id)
220
222
-> Seq Scan on second
221
- -> Hash
223
+ -> Materialize
222
224
-> Append
223
225
-> Seq Scan on first_0
224
226
Filter: (id = 1)
@@ -242,6 +244,8 @@ RETURNING *, tableoid::regclass;
242
244
Filter: (id = 1)
243
245
(8 rows)
244
246
247
+ SET enable_hashjoin = t;
248
+ SET enable_mergejoin = t;
245
249
/* Check updates (execution) */
246
250
UPDATE rowmarks.second SET id = 1
247
251
WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1 OR id = 2)
@@ -253,6 +257,8 @@ RETURNING *, tableoid::regclass;
253
257
(2 rows)
254
258
255
259
/* Check deletes (plan) */
260
+ SET enable_hashjoin = f; /* Hash Semi Join on 10 vs Hash Join on 9.6 */
261
+ SET enable_mergejoin = f; /* Merge Semi Join on 10 vs Merge Join on 9.6 */
256
262
EXPLAIN (COSTS OFF)
257
263
DELETE FROM rowmarks.second
258
264
WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1);
@@ -271,45 +277,47 @@ WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1);
271
277
EXPLAIN (COSTS OFF)
272
278
DELETE FROM rowmarks.second
273
279
WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id < 1);
274
- QUERY PLAN
275
- ---------------------------------------------------
280
+ QUERY PLAN
281
+ -----------------------------------------------
276
282
Delete on second
277
- -> Hash Join
278
- Hash Cond : (second.id = first_0.id)
279
- -> Seq Scan on second
280
- -> Hash
281
- -> HashAggregate
282
- Group Key: first_0.id
283
- -> Append
284
- -> Seq Scan on first_0
285
- Filter: (id < 1)
286
- -> Seq Scan on first_1
287
- Filter: (id < 1)
288
- -> Seq Scan on first_2
289
- Filter: (id < 1)
290
- -> Seq Scan on first_3
291
- Filter: (id < 1)
292
- -> Seq Scan on first_4
293
- Filter: (id < 1)
283
+ -> Nested Loop
284
+ Join Filter : (second.id = first_0.id)
285
+ -> HashAggregate
286
+ Group Key: first_0.id
287
+ -> Append
288
+ -> Seq Scan on first_0
289
+ Filter: (id < 1)
290
+ -> Seq Scan on first_1
291
+ Filter: (id < 1)
292
+ -> Seq Scan on first_2
293
+ Filter: (id < 1)
294
+ -> Seq Scan on first_3
295
+ Filter: (id < 1)
296
+ -> Seq Scan on first_4
297
+ Filter: (id < 1)
298
+ -> Materialize
299
+ -> Seq Scan on second
294
300
(18 rows)
295
301
296
302
EXPLAIN (COSTS OFF)
297
303
DELETE FROM rowmarks.second
298
304
WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1 OR id = 2);
299
- QUERY PLAN
300
- ---------------------------------------------
305
+ QUERY PLAN
306
+ -----------------------------------------------
301
307
Delete on second
302
- -> Hash Semi Join
303
- Hash Cond : (second.id = first_0.id)
308
+ -> Nested Loop Semi Join
309
+ Join Filter : (second.id = first_0.id)
304
310
-> Seq Scan on second
305
- -> Hash
311
+ -> Materialize
306
312
-> Append
307
313
-> Seq Scan on first_0
308
314
Filter: (id = 1)
309
315
-> Seq Scan on first_1
310
316
Filter: (id = 2)
311
317
(10 rows)
312
318
319
+ SET enable_hashjoin = t;
320
+ SET enable_mergejoin = t;
313
321
DROP SCHEMA rowmarks CASCADE;
314
322
NOTICE: drop cascades to 7 other objects
315
323
DETAIL: drop cascades to table rowmarks.first
0 commit comments