@@ -169,6 +169,8 @@ FOR SHARE;
169169(1 row)
170170
171171/* 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 */
172174EXPLAIN (COSTS OFF)
173175UPDATE rowmarks.second SET id = 2
174176WHERE 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);
187189EXPLAIN (COSTS OFF)
188190UPDATE rowmarks.second SET id = 2
189191WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id < 1);
190- QUERY PLAN
191- ---------------------------------------------------
192+ QUERY PLAN
193+ -----------------------------------------------
192194 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
210212(18 rows)
211213
212214EXPLAIN (COSTS OFF)
213215UPDATE rowmarks.second SET id = 2
214216WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1 OR id = 2);
215- QUERY PLAN
216- ---------------------------------------------
217+ QUERY PLAN
218+ -----------------------------------------------
217219 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)
220222 -> Seq Scan on second
221- -> Hash
223+ -> Materialize
222224 -> Append
223225 -> Seq Scan on first_0
224226 Filter: (id = 1)
@@ -242,6 +244,8 @@ RETURNING *, tableoid::regclass;
242244 Filter: (id = 1)
243245(8 rows)
244246
247+ SET enable_hashjoin = t;
248+ SET enable_mergejoin = t;
245249/* Check updates (execution) */
246250UPDATE rowmarks.second SET id = 1
247251WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1 OR id = 2)
@@ -253,6 +257,8 @@ RETURNING *, tableoid::regclass;
253257(2 rows)
254258
255259/* 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 */
256262EXPLAIN (COSTS OFF)
257263DELETE FROM rowmarks.second
258264WHERE 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);
271277EXPLAIN (COSTS OFF)
272278DELETE FROM rowmarks.second
273279WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id < 1);
274- QUERY PLAN
275- ---------------------------------------------------
280+ QUERY PLAN
281+ -----------------------------------------------
276282 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
294300(18 rows)
295301
296302EXPLAIN (COSTS OFF)
297303DELETE FROM rowmarks.second
298304WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1 OR id = 2);
299- QUERY PLAN
300- ---------------------------------------------
305+ QUERY PLAN
306+ -----------------------------------------------
301307 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)
304310 -> Seq Scan on second
305- -> Hash
311+ -> Materialize
306312 -> Append
307313 -> Seq Scan on first_0
308314 Filter: (id = 1)
309315 -> Seq Scan on first_1
310316 Filter: (id = 2)
311317(10 rows)
312318
319+ SET enable_hashjoin = t;
320+ SET enable_mergejoin = t;
313321DROP SCHEMA rowmarks CASCADE;
314322NOTICE: drop cascades to 7 other objects
315323DETAIL: drop cascades to table rowmarks.first
0 commit comments