@@ -179,16 +179,27 @@ SET enable_mergejoin = f; /* Merge Semi Join on 10 vs Merge Join on 9.6 */
179
179
EXPLAIN (COSTS OFF)
180
180
UPDATE rowmarks.second SET id = 2
181
181
WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1);
182
- QUERY PLAN
183
- --------------------------------------
182
+ QUERY PLAN
183
+ ---------------------------------------------
184
184
Update on second
185
185
-> Nested Loop Semi Join
186
186
-> Seq Scan on second
187
187
Filter: (id = 1)
188
188
-> Materialize
189
- -> Seq Scan on first
190
- Filter: (id = 1)
191
- (7 rows)
189
+ -> Append
190
+ -> Seq Scan on first
191
+ Filter: (id = 1)
192
+ -> Seq Scan on first_0
193
+ Filter: (id = 1)
194
+ -> Seq Scan on first_1
195
+ Filter: (id = 1)
196
+ -> Seq Scan on first_2
197
+ Filter: (id = 1)
198
+ -> Seq Scan on first_3
199
+ Filter: (id = 1)
200
+ -> Seq Scan on first_4
201
+ Filter: (id = 1)
202
+ (18 rows)
192
203
193
204
EXPLAIN (COSTS OFF)
194
205
UPDATE rowmarks.second SET id = 2
@@ -200,67 +211,113 @@ WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id < 1);
200
211
Join Filter: (second.id = first.id)
201
212
-> HashAggregate
202
213
Group Key: first.id
203
- -> Seq Scan on first
204
- Filter: (id < 1)
214
+ -> Append
215
+ -> Seq Scan on first
216
+ Filter: (id < 1)
217
+ -> Seq Scan on first_0
218
+ Filter: (id < 1)
219
+ -> Seq Scan on first_1
220
+ Filter: (id < 1)
221
+ -> Seq Scan on first_2
222
+ Filter: (id < 1)
223
+ -> Seq Scan on first_3
224
+ Filter: (id < 1)
225
+ -> Seq Scan on first_4
226
+ Filter: (id < 1)
205
227
-> Materialize
206
228
-> Seq Scan on second
207
- (9 rows)
229
+ (20 rows)
208
230
209
231
EXPLAIN (COSTS OFF)
210
232
UPDATE rowmarks.second SET id = 2
211
233
WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1 OR id = 2);
212
- QUERY PLAN
213
- ----------------------------------------------------
234
+ QUERY PLAN
235
+ ----------------------------------------------------------
214
236
Update on second
215
237
-> Nested Loop Semi Join
216
238
Join Filter: (second.id = first.id)
217
239
-> Seq Scan on second
218
240
-> Materialize
219
- -> Seq Scan on first
220
- Filter: ((id = 1) OR (id = 2))
221
- (7 rows)
241
+ -> Append
242
+ -> Seq Scan on first
243
+ Filter: ((id = 1) OR (id = 2))
244
+ -> Seq Scan on first_0
245
+ Filter: ((id = 1) OR (id = 2))
246
+ -> Seq Scan on first_1
247
+ Filter: ((id = 1) OR (id = 2))
248
+ -> Seq Scan on first_2
249
+ Filter: ((id = 1) OR (id = 2))
250
+ -> Seq Scan on first_3
251
+ Filter: ((id = 1) OR (id = 2))
252
+ -> Seq Scan on first_4
253
+ Filter: ((id = 1) OR (id = 2))
254
+ (18 rows)
222
255
223
256
EXPLAIN (COSTS OFF)
224
257
UPDATE rowmarks.second SET id = 2
225
258
WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1)
226
259
RETURNING *, tableoid::regclass;
227
- QUERY PLAN
228
- --------------------------------------
260
+ QUERY PLAN
261
+ ---------------------------------------------
229
262
Update on second
230
263
-> Nested Loop Semi Join
231
264
-> Seq Scan on second
232
265
Filter: (id = 1)
233
266
-> Materialize
234
- -> Seq Scan on first
235
- Filter: (id = 1)
236
- (7 rows)
267
+ -> Append
268
+ -> Seq Scan on first
269
+ Filter: (id = 1)
270
+ -> Seq Scan on first_0
271
+ Filter: (id = 1)
272
+ -> Seq Scan on first_1
273
+ Filter: (id = 1)
274
+ -> Seq Scan on first_2
275
+ Filter: (id = 1)
276
+ -> Seq Scan on first_3
277
+ Filter: (id = 1)
278
+ -> Seq Scan on first_4
279
+ Filter: (id = 1)
280
+ (18 rows)
237
281
238
282
SET enable_hashjoin = t;
239
283
SET enable_mergejoin = t;
240
284
/* Check updates (execution) */
241
285
UPDATE rowmarks.second SET id = 1
242
286
WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1 OR id = 2)
243
287
RETURNING *, tableoid::regclass;
244
- id | tableoid
245
- ----+----------
246
- (0 rows)
288
+ id | tableoid
289
+ ----+-----------------
290
+ 1 | rowmarks.second
291
+ 1 | rowmarks.second
292
+ (2 rows)
247
293
248
294
/* Check deletes (plan) */
249
295
SET enable_hashjoin = f; /* Hash Semi Join on 10 vs Hash Join on 9.6 */
250
296
SET enable_mergejoin = f; /* Merge Semi Join on 10 vs Merge Join on 9.6 */
251
297
EXPLAIN (COSTS OFF)
252
298
DELETE FROM rowmarks.second
253
299
WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1);
254
- QUERY PLAN
255
- --------------------------------------
300
+ QUERY PLAN
301
+ ---------------------------------------------
256
302
Delete on second
257
303
-> Nested Loop Semi Join
258
304
-> Seq Scan on second
259
305
Filter: (id = 1)
260
306
-> Materialize
261
- -> Seq Scan on first
262
- Filter: (id = 1)
263
- (7 rows)
307
+ -> Append
308
+ -> Seq Scan on first
309
+ Filter: (id = 1)
310
+ -> Seq Scan on first_0
311
+ Filter: (id = 1)
312
+ -> Seq Scan on first_1
313
+ Filter: (id = 1)
314
+ -> Seq Scan on first_2
315
+ Filter: (id = 1)
316
+ -> Seq Scan on first_3
317
+ Filter: (id = 1)
318
+ -> Seq Scan on first_4
319
+ Filter: (id = 1)
320
+ (18 rows)
264
321
265
322
EXPLAIN (COSTS OFF)
266
323
DELETE FROM rowmarks.second
@@ -272,25 +329,47 @@ WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id < 1);
272
329
Join Filter: (second.id = first.id)
273
330
-> HashAggregate
274
331
Group Key: first.id
275
- -> Seq Scan on first
276
- Filter: (id < 1)
332
+ -> Append
333
+ -> Seq Scan on first
334
+ Filter: (id < 1)
335
+ -> Seq Scan on first_0
336
+ Filter: (id < 1)
337
+ -> Seq Scan on first_1
338
+ Filter: (id < 1)
339
+ -> Seq Scan on first_2
340
+ Filter: (id < 1)
341
+ -> Seq Scan on first_3
342
+ Filter: (id < 1)
343
+ -> Seq Scan on first_4
344
+ Filter: (id < 1)
277
345
-> Materialize
278
346
-> Seq Scan on second
279
- (9 rows)
347
+ (20 rows)
280
348
281
349
EXPLAIN (COSTS OFF)
282
350
DELETE FROM rowmarks.second
283
351
WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1 OR id = 2);
284
- QUERY PLAN
285
- ----------------------------------------------------
352
+ QUERY PLAN
353
+ ----------------------------------------------------------
286
354
Delete on second
287
355
-> Nested Loop Semi Join
288
356
Join Filter: (second.id = first.id)
289
357
-> Seq Scan on second
290
358
-> Materialize
291
- -> Seq Scan on first
292
- Filter: ((id = 1) OR (id = 2))
293
- (7 rows)
359
+ -> Append
360
+ -> Seq Scan on first
361
+ Filter: ((id = 1) OR (id = 2))
362
+ -> Seq Scan on first_0
363
+ Filter: ((id = 1) OR (id = 2))
364
+ -> Seq Scan on first_1
365
+ Filter: ((id = 1) OR (id = 2))
366
+ -> Seq Scan on first_2
367
+ Filter: ((id = 1) OR (id = 2))
368
+ -> Seq Scan on first_3
369
+ Filter: ((id = 1) OR (id = 2))
370
+ -> Seq Scan on first_4
371
+ Filter: ((id = 1) OR (id = 2))
372
+ (18 rows)
294
373
295
374
SET enable_hashjoin = t;
296
375
SET enable_mergejoin = t;
0 commit comments