@@ -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 onfirst_0
201- Filter: (id < 1)
202- -> Seq Scan onfirst_1
203- Filter: (id < 1)
204- -> Seq Scan onfirst_2
205- Filter: (id < 1)
206- -> Seq Scan onfirst_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 onfirst_1
203+ Filter: (id < 1)
204+ -> Seq Scan onfirst_2
205+ Filter: (id < 1)
206+ -> Seq Scan onfirst_3
207+ Filter: (id < 1)
208+ -> Seq Scan onfirst_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 onfirst_0
285- Filter: (id < 1)
286- -> Seq Scan onfirst_1
287- Filter: (id < 1)
288- -> Seq Scan onfirst_2
289- Filter: (id < 1)
290- -> Seq Scan onfirst_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 onfirst_1
291+ Filter: (id < 1)
292+ -> Seq Scan onfirst_2
293+ Filter: (id < 1)
294+ -> Seq Scan onfirst_3
295+ Filter: (id < 1)
296+ -> Seq Scan onfirst_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