OSDN Git Service

7532d63f15e2d2f2c6cf344e7789a0c7ba789554
[pghintplan/pg_hint_plan.git] / sql / ut-R.sql
1 LOAD 'pg_hint_plan';
2 SET pg_hint_plan.enable_hint TO on;
3 SET pg_hint_plan.debug_print TO on;
4 SET client_min_messages TO LOG;
5 SET search_path TO public;
6
7 \o results/R_sample.out.log
8 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
9 \o
10 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_sample.out.log > results/R_sample.out
11 \! diff expected/R_sample.out results/R_sample.out
12
13 ----
14 ---- No. R-1-1 specified pattern of the object name
15 ----
16
17 -- No. R-1-1-1
18 \o results/R_1-1-1.out.log
19 /*+Rows(t1 t2 #1)*/
20 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
21 \o
22 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-1-1.out.log > results/R_1-1-1.out
23 \! diff expected/R_1-1-1.out results/R_1-1-1.out
24
25 -- No. R-1-1-2
26 \o results/R_1-1-2.out.log
27 /*+Rows(t1 t2 #1)*/
28 EXPLAIN SELECT * FROM s1.t1 t_1, s1.t2 t_2 WHERE t_1.c1 = t_2.c1;
29 \o
30 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-1-2.out.log > results/R_1-1-2.out
31 \! diff expected/R_1-1-2.out results/R_1-1-2.out
32
33 -- No. R-1-1-3
34 \o results/R_1-1-3.out.log
35 /*+Rows(t_1 t_2 #1)*/
36 EXPLAIN SELECT * FROM s1.t1 t_1, s1.t2 t_2 WHERE t_1.c1 = t_2.c1;
37 \o
38 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-1-3.out.log > results/R_1-1-3.out
39 \! diff expected/R_1-1-3.out results/R_1-1-3.out
40
41
42 ----
43 ---- No. R-1-2 specified schema name in the hint option
44 ----
45
46 -- No. R-1-2-1
47 \o results/R_1-2-1.out.log
48 /*+Rows(t1 t2 #1)*/
49 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
50 \o
51 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-2-1.out.log > results/R_1-2-1.out
52 \! diff expected/R_1-2-1.out results/R_1-2-1.out
53
54 -- No. R-1-2-2
55 \o results/R_1-2-2.out.log
56 /*+Rows(s1.t1 s1.t2 #1)*/
57 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
58 \o
59 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-2-2.out.log > results/R_1-2-2.out
60 \! diff expected/R_1-2-2.out results/R_1-2-2.out
61
62 ----
63 ---- No. R-1-3 table doesn't exist in the hint option
64 ----
65
66 -- No. R-1-3-1
67 \o results/R_1-3-1.out.log
68 /*+Rows(t1 t2 #1)*/
69 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
70 \o
71 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-3-1.out.log > results/R_1-3-1.out
72 \! diff expected/R_1-3-1.out results/R_1-3-1.out
73
74 -- No. R-1-3-2
75 \o results/R_1-3-2.out.log
76 /*+Rows(t3 t4 #1)*/
77 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
78 \o
79 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-3-2.out.log > results/R_1-3-2.out
80 \! diff expected/R_1-3-2.out results/R_1-3-2.out
81
82 ----
83 ---- No. R-1-4 conflict table name
84 ----
85
86 -- No. R-1-4-1
87 \o results/R_1-4-1.out.log
88 /*+Rows(t1 t2 #1)*/
89 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
90 \o
91 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-4-1.out.log > results/R_1-4-1.out
92 \! diff expected/R_1-4-1.out results/R_1-4-1.out
93
94 -- No. R-1-4-2
95 \o results/R_1-4-2.out.log
96 EXPLAIN SELECT * FROM s1.t1, s2.t1 WHERE s1.t1.c1 = s2.t1.c1;
97 /*+Rows(t1 t1 #1)*/
98 EXPLAIN SELECT * FROM s1.t1, s2.t1 WHERE s1.t1.c1 = s2.t1.c1;
99 /*+Rows(s1.t1 s2.t1 #1)*/
100 EXPLAIN SELECT * FROM s1.t1, s2.t1 WHERE s1.t1.c1 = s2.t1.c1;
101
102 EXPLAIN SELECT * FROM s1.t1, s2.t1 s2t1 WHERE s1.t1.c1 = s2t1.c1;
103 /*+Rows(t1 s2t1 #1)*/
104 EXPLAIN SELECT * FROM s1.t1, s2.t1 s2t1 WHERE s1.t1.c1 = s2t1.c1;
105 \o
106 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-4-2.out.log > results/R_1-4-2.out
107 \! diff expected/R_1-4-2.out results/R_1-4-2.out
108
109 -- No. R-1-4-3
110 \o results/R_1-4-3.out.log
111 EXPLAIN SELECT *, (SELECT max(t1.c1) FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1) FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
112 /*+Rows(t1 t2 #1)*/
113 EXPLAIN SELECT *, (SELECT max(t1.c1) FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1) FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
114 /*+Rows(st1 st2 #1)Rows(t1 t2 #1)*/
115 EXPLAIN SELECT *, (SELECT max(st1.c1) FROM s1.t1 st1, s1.t2 st2 WHERE st1.c1 = st2.c1) FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
116 \o
117 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-4-3.out.log > results/R_1-4-3.out
118 \! diff expected/R_1-4-3.out results/R_1-4-3.out
119
120 ----
121 ---- No. R-1-5 conflict table name
122 ----
123
124 -- No. R-1-5-1
125 \o results/R_1-5-1.out.log
126 /*+Rows(t1 t2 #1)*/
127 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
128 \o
129 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-5-1.out.log > results/R_1-5-1.out
130 \! diff expected/R_1-5-1.out results/R_1-5-1.out
131
132 -- No. R-1-5-2
133 \o results/R_1-5-2.out.log
134 /*+Rows(t1 t1 #1)*/
135 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
136 \o
137 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-5-2.out.log > results/R_1-5-2.out
138 \! diff expected/R_1-5-2.out results/R_1-5-2.out
139
140 -- No. R-1-5-3
141 \o results/R_1-5-3.out.log
142 /*+(t1 t1)(t2 t2)*/
143 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
144 EXPLAIN SELECT * FROM s1.t1, s1.t2, s1.t3 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1;
145 /*+(t1 t2 t1 t2)*/
146 EXPLAIN SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
147 \o
148 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-5-3.out.log > results/R_1-5-3.out
149 \! diff expected/R_1-5-3.out results/R_1-5-3.out
150
151 ----
152 ---- No. R-1-6 object type for the hint
153 ----
154
155 -- No. R-1-6-1
156 \o results/R_1-6-1.out.log
157 /*+Rows(t1 t2 #1)*/
158 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
159 \o
160 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-1.out.log > results/R_1-6-1.out
161 \! diff expected/R_1-6-1.out results/R_1-6-1.out
162
163 -- No. R-1-6-2
164 \o results/R_1-6-2.out.log
165 EXPLAIN SELECT * FROM s1.p1 t1, s1.p1 t2 WHERE t1.c1 = t2.c1;
166 /*+Rows(t1 t2 #1)*/
167 EXPLAIN SELECT * FROM s1.p1 t1, s1.p1 t2 WHERE t1.c1 = t2.c1;
168 \o
169 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-2.out.log > results/R_1-6-2.out
170 \! diff expected/R_1-6-2.out results/R_1-6-2.out
171
172 -- No. R-1-6-3
173 \o results/R_1-6-3.out.log
174 EXPLAIN SELECT * FROM s1.ul1 t1, s1.ul1 t2 WHERE t1.c1 = t2.c1;
175 /*+Rows(t1 t2 #1)*/
176 EXPLAIN SELECT * FROM s1.ul1 t1, s1.ul1 t2 WHERE t1.c1 = t2.c1;
177 \o
178 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-3.out.log > results/R_1-6-3.out
179 \! diff expected/R_1-6-3.out results/R_1-6-3.out
180
181 -- No. R-1-6-4
182 CREATE TEMP TABLE tm1 (LIKE s1.t1 INCLUDING ALL);
183 \o results/R_1-6-4.out.log
184 EXPLAIN SELECT * FROM tm1 t1, tm1 t2 WHERE t1.c1 = t2.c1;
185 /*+Rows(t1 t2 #1)*/
186 EXPLAIN SELECT * FROM tm1 t1, tm1 t2 WHERE t1.c1 = t2.c1;
187 \o
188 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-4.out.log > results/R_1-6-4.out
189 \! diff expected/R_1-6-4.out results/R_1-6-4.out
190
191 -- No. R-1-6-5
192 \o results/R_1-6-5.out.log
193 EXPLAIN SELECT * FROM pg_catalog.pg_class t1, pg_catalog.pg_class t2 WHERE t1.oid = t2.oid;
194 /*+Rows(t1 t2 #1)*/
195 EXPLAIN SELECT * FROM pg_catalog.pg_class t1, pg_catalog.pg_class t2 WHERE t1.oid = t2.oid;
196 \o
197 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-5.out.log > results/R_1-6-5.out
198 \! diff expected/R_1-6-5.out results/R_1-6-5.out
199
200 -- No. R-1-6-6
201 -- refer ut-fdw.sql
202
203 -- No. R-1-6-7
204 \o results/R_1-6-7.out.log
205 EXPLAIN SELECT * FROM s1.f1() t1, s1.f1() t2 WHERE t1.c1 = t2.c1;
206 /*+Rows(t1 t2 #3)*/
207 EXPLAIN SELECT * FROM s1.f1() t1, s1.f1() t2 WHERE t1.c1 = t2.c1;
208 \o
209 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-7.out.log > results/R_1-6-7.out
210 \! diff expected/R_1-6-7.out results/R_1-6-7.out
211
212 -- No. R-1-6-8
213 \o results/R_1-6-8.out.log
214 EXPLAIN SELECT * FROM (VALUES(1,1,1,'1'), (2,2,2,'2'), (3,3,3,'3')) AS t1 (c1, c2, c3, c4),  s1.t2 WHERE t1.c1 = t2.c1;
215 /*+Rows(t1 t2 #1)*/
216 EXPLAIN SELECT * FROM (VALUES(1,1,1,'1'), (2,2,2,'2'), (3,3,3,'3')) AS t1 (c1, c2, c3, c4),  s1.t2 WHERE t1.c1 = t2.c1;
217 /*+Rows(*VALUES* t2 #1)*/
218 EXPLAIN SELECT * FROM (VALUES(1,1,1,'1'), (2,2,2,'2'), (3,3,3,'3')) AS t1 (c1, c2, c3, c4),  s1.t2 WHERE t1.c1 = t2.c1;
219 \o
220 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-8.out.log > results/R_1-6-8.out
221 \! diff expected/R_1-6-8.out results/R_1-6-8.out
222
223 -- No. R-1-6-9
224 \o results/R_1-6-9.out.log
225 EXPLAIN WITH c1(c1) AS (SELECT max(t1.c1) FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1) SELECT * FROM s1.t1, c1 WHERE t1.c1 = c1.c1;
226 /*+Rows(t1 t2 #1)Rows(t1 c1 +1)*/
227 EXPLAIN WITH c1(c1) AS (SELECT max(t1.c1) FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1) SELECT * FROM s1.t1, c1 WHERE t1.c1 = c1.c1;
228 \o
229 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-9.out.log > results/R_1-6-9.out
230 \! diff expected/R_1-6-9.out results/R_1-6-9.out
231
232 -- No. R-1-6-10
233 \o results/R_1-6-10.out.log
234 EXPLAIN SELECT * FROM s1.v1 t1, s1.v1 t2 WHERE t1.c1 = t2.c1;
235 /*+Rows(t1 t2 #1)*/
236 EXPLAIN SELECT * FROM s1.v1 t1, s1.v1 t2 WHERE t1.c1 = t2.c1;
237 /*+Rows(v1t1 v1t1_ #1)*/
238 EXPLAIN SELECT * FROM s1.v1 t1, s1.v1_ t2 WHERE t1.c1 = t2.c1;
239 \o
240 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-10.out.log > results/R_1-6-10.out
241 \! diff expected/R_1-6-10.out results/R_1-6-10.out
242
243 -- No. R-1-6-11
244 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1 AND t1.c1 = (SELECT max(st1.c1) FROM s1.t1 st1, s1.t2 st2 WHERE st1.c1 = st2.c1);
245 /*+Rows(t1 t2 #1)Rows(st1 st2 #1)*/
246 EXPLAIN (COSTS true) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1 AND t1.c1 = (SELECT max(st1.c1) FROM s1.t1 st1, s1.t2 st2 WHERE st1.c1 = st2.c1);
247 --
248 -- There are cases where difference in the measured value and predicted value
249 -- depending upon the version of PostgreSQL
250 --
251
252 \o results/R_1-6-11.out.log
253 EXPLAIN SELECT * FROM s1.t1, (SELECT t2.c1 FROM s1.t2) st2 WHERE t1.c1 = st2.c1;
254 /*+Rows(t1 st2 #1)*/
255 EXPLAIN SELECT * FROM s1.t1, (SELECT t2.c1 FROM s1.t2) st2 WHERE t1.c1 = st2.c1;
256 /*+Rows(t1 t2 #1)*/
257 EXPLAIN SELECT * FROM s1.t1, (SELECT t2.c1 FROM s1.t2) st2 WHERE t1.c1 = st2.c1;
258 \o
259 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-11.out.log > results/R_1-6-11.out
260 \! diff expected/R_1-6-11.out results/R_1-6-11.out
261
262 ----
263 ---- No. R-1-7 specified number of conditions
264 ----
265
266 -- No. R-1-7-1
267 \o results/R_1-7-1.out.log
268 /*+Rows(t1 #1)*/
269 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
270 \o
271 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-7-1.out.log > results/R_1-7-1.out
272 \! diff expected/R_1-7-1.out results/R_1-7-1.out
273
274 -- No. R-1-7-2
275 \o results/R_1-7-2.out.log
276 /*+Rows(t1 t2 1)*/
277 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
278 \o
279 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-7-2.out.log > results/R_1-7-2.out
280 \! diff expected/R_1-7-2.out results/R_1-7-2.out
281
282 -- No. R-1-7-3
283 \o results/R_1-7-3.out.log
284 /*+Rows(t1 t2 #notrows)*/
285 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
286 \o
287 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-7-3.out.log > results/R_1-7-3.out
288 \! diff expected/R_1-7-3.out results/R_1-7-3.out
289
290 ----
291 ---- No. R-2-1 some complexity query blocks
292 ----
293
294 -- No. R-2-1-1
295 EXPLAIN (COSTS false)
296 SELECT max(bmt1.c1), (
297 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
298 ), (
299 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
300 )
301                     FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
302 ;
303 /*+
304 Leading(bmt1 bmt2 bmt3 bmt4)
305 Leading(b1t2 b1t3 b1t4 b1t1)
306 Leading(b2t3 b2t4 b2t1 b2t2)
307 MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
308 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
309 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
310 */
311 EXPLAIN (COSTS false)
312 SELECT max(bmt1.c1), (
313 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
314 ), (
315 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
316 )
317                     FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
318 ;
319
320 -- No. R-2-1-2
321 EXPLAIN (COSTS false)
322 SELECT max(bmt1.c1), (
323 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
324 ), (
325 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
326 ), (
327 SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
328 )
329                     FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
330 ;
331 /*+
332 Leading(bmt1 bmt2 bmt3 bmt4)
333 Leading(b1t2 b1t3 b1t4 b1t1)
334 Leading(b2t3 b2t4 b2t1 b2t2)
335 Leading(b3t4 b3t1 b3t2 b3t3)
336 MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
337 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
338 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
339 MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
340 */
341 EXPLAIN (COSTS false)
342 SELECT max(bmt1.c1), (
343 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
344 ), (
345 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
346 ), (
347 SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
348 )
349                     FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
350 ;
351
352 -- No. R-2-1-3
353 EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = sbmt3.c1 AND sbmt3.ctid = '(1,1)' AND bmt1.c1 = sbmt4.c1 AND sbmt4.ctid = '(1,1)';
354 /*+
355 Leading(bmt4 bmt3 bmt2 bmt1)
356 MergeJoin(bmt4 bmt3)HashJoin(bmt4 bmt3 bmt2)NestLoop(bmt1 bmt2 bmt3 bmt4)
357 */
358 EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = sbmt3.c1 AND sbmt3.ctid = '(1,1)' AND bmt1.c1 = sbmt4.c1 AND sbmt4.ctid = '(1,1)';
359
360 -- No. R-2-1-4
361 EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, (SELECT ctid, * FROM s1.t2 bmt2) sbmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = sbmt2.c1 AND sbmt2.ctid = '(1,1)' AND bmt1.c1 = sbmt3.c1 AND sbmt3.ctid = '(1,1)' AND bmt1.c1 = sbmt4.c1 AND sbmt4.ctid = '(1,1)';
362 /*+
363 Leading(bmt4 bmt3 bmt2 bmt1)
364 MergeJoin(bmt4 bmt3)HashJoin(bmt4 bmt3 bmt2)NestLoop(bmt1 bmt2 bmt3 bmt4)
365 */
366 EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, (SELECT ctid, * FROM s1.t2 bmt2) sbmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = sbmt2.c1 AND sbmt2.ctid = '(1,1)' AND bmt1.c1 = sbmt3.c1 AND sbmt3.ctid = '(1,1)' AND bmt1.c1 = sbmt4.c1 AND sbmt4.ctid = '(1,1)';
367
368 -- No. R-2-1-5
369 EXPLAIN (COSTS false)
370 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
371   AND bmt1.c1 <> (
372 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
373 ) AND bmt1.c1 <> (
374 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
375 )
376 ;
377 /*+
378 Leading(bmt1 bmt2 bmt3 bmt4)
379 Leading(b1t2 b1t3 b1t4 b1t1)
380 Leading(b2t3 b2t4 b2t1 b2t2)
381 MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
382 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
383 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
384 */
385 EXPLAIN (COSTS false)
386 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
387   AND bmt1.c1 <> (
388 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
389 ) AND bmt1.c1 <> (
390 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
391 )
392 ;
393
394 -- No. R-2-1-6
395 EXPLAIN (COSTS false)
396 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
397   AND bmt1.c1 <> (
398 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
399 ) AND bmt1.c1 <> (
400 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
401 ) AND bmt1.c1 <> (
402 SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
403 )
404 ;
405 /*+
406 Leading(bmt1 bmt2 bmt3 bmt4)
407 Leading(b1t2 b1t3 b1t4 b1t1)
408 Leading(b2t3 b2t4 b2t1 b2t2)
409 Leading(b3t4 b3t1 b3t2 b3t3)
410 MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
411 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
412 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
413 MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
414 */
415 EXPLAIN (COSTS false)
416 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
417   AND bmt1.c1 <> (
418 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
419 ) AND bmt1.c1 <> (
420 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
421 ) AND bmt1.c1 <> (
422 SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
423 )
424 ;
425
426 -- No. R-2-1-7
427 EXPLAIN (COSTS false)
428 WITH c1 (c1) AS (
429 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
430 )
431 , c2 (c1) AS (
432 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
433 )
434 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
435 , c1, c2
436                                                                         WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
437 AND bmt1.c1 = c1.c1
438 AND bmt1.c1 = c2.c1
439 ;
440 /*+
441 Leading(c2 c1 bmt1 bmt2 bmt3 bmt4)
442 Leading(b1t2 b1t3 b1t4 b1t1)
443 Leading(b2t3 b2t4 b2t1 b2t2)
444 MergeJoin(c2 c1)HashJoin(c2 c1 bmt1)NestLoop(c2 c1 bmt1 bmt2)MergeJoin(c2 c1 bmt1 bmt2 bmt3)HashJoin(c2 c1 bmt1 bmt2 bmt3 bmt4)
445 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
446 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
447 */
448 EXPLAIN (COSTS false)
449 WITH c1 (c1) AS (
450 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
451 )
452 , c2 (c1) AS (
453 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
454 )
455 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
456 , c1, c2
457                                                                         WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
458 AND bmt1.c1 = c1.c1
459 AND bmt1.c1 = c2.c1
460 ;
461
462 -- No. R-2-1-8
463 EXPLAIN (COSTS false)
464 WITH c1 (c1) AS (
465 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
466 )
467 , c2 (c1) AS (
468 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
469 )
470 , c3 (c1) AS (
471 SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
472 )
473 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
474 , c1, c2, c3
475                                                                         WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
476 AND bmt1.c1 = c1.c1
477 AND bmt1.c1 = c2.c1
478 AND bmt1.c1 = c3.c1
479 ;
480 /*+
481 Leading(c3 c2 c1 bmt1 bmt2 bmt3 bmt4)
482 Leading(b1t2 b1t3 b1t4 b1t1)
483 Leading(b2t3 b2t4 b2t1 b2t2)
484 Leading(b3t4 b3t1 b3t2 b3t3)
485 MergeJoin(c3 c2)HashJoin(c3 c2 c1)NestLoop(c3 c2 c1 bmt1)MergeJoin(c3 c2 c1 bmt1 bmt2)HashJoin(c3 c2 c1 bmt1 bmt2 bmt3)NestLoop(c3 c2 c1 bmt1 bmt2 bmt3 bmt4)
486 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
487 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
488 MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
489 */
490 EXPLAIN (COSTS false)
491 WITH c1 (c1) AS (
492 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
493 )
494 , c2 (c1) AS (
495 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
496 )
497 , c3 (c1) AS (
498 SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
499 )
500 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
501 , c1, c2, c3
502                                                                         WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
503 AND bmt1.c1 = c1.c1
504 AND bmt1.c1 = c2.c1
505 AND bmt1.c1 = c3.c1
506 ;
507
508 ----
509 ---- No. R-2-2 the number of the tables per quiry block
510 ----
511
512 -- No. R-2-2-1
513 EXPLAIN (COSTS false)
514 WITH c1 (c1) AS (
515 SELECT max(b1t1.c1) FROM s1.t1 b1t1 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = 1
516 )
517 SELECT max(bmt1.c1), (
518 SELECT max(b2t1.c1) FROM s1.t1 b2t1 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = 1
519 )
520                     FROM s1.t1 bmt1, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = 1
521 AND bmt1.c1 = c1.c1
522 AND bmt1.c1 <> (
523 SELECT max(b3t1.c1) FROM s1.t1 b3t1 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = 1
524 )
525 ;
526 /*+
527 Leading(c1 bmt1)
528 HashJoin(bmt1 c1)
529 HashJoin(b1t1 c1)
530 HashJoin(b2t1 c1)
531 HashJoin(b3t1 c1)
532 */
533 EXPLAIN (COSTS false)
534 WITH c1 (c1) AS (
535 SELECT max(b1t1.c1) FROM s1.t1 b1t1 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = 1
536 )
537 SELECT max(bmt1.c1), (
538 SELECT max(b2t1.c1) FROM s1.t1 b2t1 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = 1
539 )
540                     FROM s1.t1 bmt1, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = 1
541 AND bmt1.c1 = c1.c1
542 AND bmt1.c1 <> (
543 SELECT max(b3t1.c1) FROM s1.t1 b3t1 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = 1
544 )
545 ;
546
547 -- No. R-2-2-2
548 EXPLAIN (COSTS false)
549 WITH c1 (c1) AS (
550 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)'
551 )
552 SELECT max(bmt1.c1), (
553 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)'
554 )
555                     FROM s1.t1 bmt1, s1.t2 bmt2, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)'
556 AND bmt1.c1 = c1.c1
557 AND bmt1.c1 <> (
558 SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)'
559 )
560 ;
561 /*+
562 Leading(c1 bmt2 bmt1)
563 Leading(b1t2 b1t1)
564 Leading(b2t2 b2t1)
565 Leading(b3t2 b3t1)
566 MergeJoin(c1 bmt2)
567 HashJoin(c1 bmt1 bmt2)
568 MergeJoin(b1t1 b1t2)
569 MergeJoin(b2t1 b2t2)
570 MergeJoin(b3t1 b3t2)
571 */
572 EXPLAIN (COSTS false)
573 WITH c1 (c1) AS (
574 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)'
575 )
576 SELECT max(bmt1.c1), (
577 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)'
578 )
579                     FROM s1.t1 bmt1, s1.t2 bmt2, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)'
580 AND bmt1.c1 = c1.c1
581 AND bmt1.c1 <> (
582 SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)'
583 )
584 ;
585
586 -- No. R-2-2-3
587 EXPLAIN (COSTS false)
588 WITH c1 (c1) AS (
589 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
590 )
591 SELECT max(bmt1.c1), (
592 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
593 )
594                     FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)' AND bmt1.c1 = c1.c1
595 AND bmt1.c1 <> (
596 SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
597 )
598 ;
599 /*+
600 Leading(c1 bmt4 bmt3 bmt2 bmt1)
601 Leading(b1t4 b1t3 b1t2 b1t1) 
602 Leading(b2t4 b2t3 b2t2 b2t1)
603 Leading(b3t4 b3t3 b3t2 b3t1)
604 MergeJoin(c1 bmt4)
605 HashJoin(c1 bmt4 bmt3)
606 NestLoop(c1 bmt4 bmt3 bmt2)
607 MergeJoin(c1 bmt4 bmt3 bmt2 bmt1)
608 HashJoin(b1t4 b1t3)
609 NestLoop(b1t4 b1t3 b1t2)
610 MergeJoin(b1t4 b1t3 b1t2 b1t1)
611 HashJoin(b2t4 b2t3)
612 NestLoop(b2t4 b2t3 b2t2)
613 MergeJoin(b2t4 b2t3 b2t2 b2t1)
614 HashJoin(b3t4 b3t3)
615 NestLoop(b3t4 b3t3 b3t2)
616 MergeJoin(b3t4 b3t3 b3t2 b3t1)
617 */
618 EXPLAIN (COSTS false)
619 WITH c1 (c1) AS (
620 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
621 )
622 SELECT max(bmt1.c1), (
623 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
624 )
625                     FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)' AND bmt1.c1 = c1.c1
626 AND bmt1.c1 <> (
627 SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
628 )
629 ;
630
631 -- No. R-2-2-4
632 EXPLAIN (COSTS false)
633 WITH c1 (c1) AS (
634 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
635 )
636 SELECT max(bmt1.c1), (
637 SELECT max(b2t1.c1) FROM s1.t1 b2t1 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = 1
638 )
639                     FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)' AND bmt1.c1 = c1.c1
640 AND bmt1.c1 <> (
641 SELECT max(b3t1.c1) FROM s1.t1 b3t1 WHERE b3t1.ctid = '(1,1)'
642 )
643 ;
644 /*+
645 Leading(c1 bmt4 bmt3 bmt2 bmt1)
646 Leading(b1t4 b1t3 b1t2 b1t1)
647 MergeJoin(c1 bmt4)
648 HashJoin(c1 bmt4 bmt3)
649 NestLoop(c1 bmt4 bmt3 bmt2)
650 MergeJoin(c1 bmt4 bmt3 bmt2 bmt1)
651 MergeJoin(b1t4 b1t3)
652 HashJoin(b1t4 b1t3 b1t2)
653 NestLoop(b1t4 b1t3 b1t2 b1t1)
654 */
655 EXPLAIN (COSTS false)
656 WITH c1 (c1) AS (
657 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
658 )
659 SELECT max(bmt1.c1), (
660 SELECT max(b2t1.c1) FROM s1.t1 b2t1 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = 1
661 )
662                     FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)' AND bmt1.c1 = c1.c1
663 AND bmt1.c1 <> (
664 SELECT max(b3t1.c1) FROM s1.t1 b3t1 WHERE b3t1.ctid = '(1,1)'
665 )
666 ;
667
668 ----
669 ---- No. R-2-3 RULE or VIEW
670 ----
671
672 -- No. R-2-3-1
673 EXPLAIN UPDATE s1.r1 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
674 /*+
675 Leading(t4 t3 t2 t1 r1)
676 MergeJoin(t4 t3 t2 t1 r1)
677 HashJoin(t4 t3 t2 t1)
678 NestLoop(t4 t3 t2)
679 MergeJoin(t4 t3)
680 */
681 EXPLAIN UPDATE s1.r1 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
682 EXPLAIN UPDATE s1.r1_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
683 /*+
684 Leading(b1t4 b1t3 b1t2 b1t1 r1_)
685 MergeJoin(b1t4 b1t3 b1t2 b1t1 r1_)
686 HashJoin(b1t4 b1t3 b1t2 b1t1)
687 NestLoop(b1t4 b1t3 b1t2)
688 MergeJoin(b1t4 b1t3)
689 */
690 EXPLAIN UPDATE s1.r1_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
691
692 -- No. R-2-3-2
693 EXPLAIN UPDATE s1.r2 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
694 /*+
695 Leading(t4 t3 t2 t1 r2)
696 MergeJoin(t4 t3 t2 t1 r2)
697 HashJoin(t4 t3 t2 t1)
698 NestLoop(t4 t3 t2)
699 MergeJoin(t4 t3)
700 */
701 EXPLAIN UPDATE s1.r2 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
702 EXPLAIN UPDATE s1.r2_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
703 /*+
704 Leading(b1t1 b1t2 b1t3 b1t4 r2_)
705 Leading(b2t1 b2t2 b2t3 b2t4 r2_)
706 MergeJoin(b1t1 b1t2)
707 HashJoin(b1t1 b1t2 b1t3)
708 NestLoop(b1t1 b1t2 b1t3 b1t4)
709 MergeJoin(b1t1 b1t2 b1t3 b1t4 r2_)
710 MergeJoin(b2t1 b2t2)
711 HashJoin(b2t1 b2t2 b2t3)
712 NestLoop(b2t1 b2t2 b2t3 b2t4)
713 MergeJoin(b2t1 b2t2 b2t3 b2t4 r2_)
714 */
715 EXPLAIN UPDATE s1.r2_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
716
717 -- No. R-2-3-3
718 EXPLAIN UPDATE s1.r3 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
719 /*+
720 Leading(t4 t3 t2 t1 r3)
721 MergeJoin(t4 t3 t2 t1 r3)
722 HashJoin(t4 t3 t2 t1)
723 NestLoop(t4 t3 t2)
724 MergeJoin(t4 t3)
725 */
726 EXPLAIN UPDATE s1.r3 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
727 EXPLAIN UPDATE s1.r3_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
728 /*+
729 Leading(b1t1 b1t2 b1t3 b1t4 r3_)
730 Leading(b2t1 b2t2 b2t3 b2t4 r3_)
731 Leading(b3t1 b3t2 b3t3 b3t4 r3_)
732 MergeJoin(b1t1 b1t2)
733 HashJoin(b1t1 b1t2 b1t3)
734 NestLoop(b1t1 b1t2 b1t3 b1t4)
735 MergeJoin(b1t1 b1t2 b1t3 b1t4 r3_)
736 MergeJoin(b2t1 b2t2)
737 HashJoin(b2t1 b2t2 b2t3)
738 NestLoop(b2t1 b2t2 b2t3 b2t4)
739 MergeJoin(b2t1 b2t2 b2t3 b2t4 r3_)
740 MergeJoin(b3t1 b3t2)
741 HashJoin(b3t1 b3t2 b3t3)
742 NestLoop(b3t1 b3t2 b3t3 b3t4)
743 MergeJoin(b3t1 b3t2 b3t3 b3t4 r3_)
744 */
745 EXPLAIN UPDATE s1.r3_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
746
747 -- No. R-2-3-4
748 EXPLAIN SELECT * FROM s1.v1 v1, s1.v1 v2 WHERE v1.c1 = v2.c1;
749 /*+(v1t1 v1t1)*/
750 EXPLAIN SELECT * FROM s1.v1 v1, s1.v1 v2 WHERE v1.c1 = v2.c1;
751
752 -- No. R-2-3-5
753 EXPLAIN SELECT * FROM s1.v1 v1, s1.v1_ v2 WHERE v1.c1 = v2.c1;
754 /*+(v1t1 v1t1_)*/
755 EXPLAIN SELECT * FROM s1.v1 v1, s1.v1_ v2 WHERE v1.c1 = v2.c1;
756
757 -- No. R-2-3-6
758 EXPLAIN SELECT * FROM s1.r4 t1, s1.r4 t2 WHERE t1.c1 = t2.c1;
759 /*+(r4t1 r4t1)*/
760 EXPLAIN SELECT * FROM s1.r4 t1, s1.r4 t2 WHERE t1.c1 = t2.c1;
761
762 -- No. R-2-3-7
763 EXPLAIN SELECT * FROM s1.r4 t1, s1.r5 t2 WHERE t1.c1 = t2.c1;
764 /*+(r4t1 r5t1)*/
765 EXPLAIN SELECT * FROM s1.r4 t1, s1.r5 t2 WHERE t1.c1 = t2.c1;
766
767 ----
768 ---- No. R-2-4 VALUES clause
769 ----
770
771 -- No. R-2-4-1
772 EXPLAIN SELECT * FROM s1.t1, s1.t2, (VALUES(1,1,1,'1')) AS t3 (c1, c2, c3, c4) WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1;
773 /*+ Leading(t3 t1 t2) (t3 t1)(t3 t1 t2)*/
774 EXPLAIN SELECT * FROM s1.t1, s1.t2, (VALUES(1,1,1,'1')) AS t3 (c1, c2, c3, c4) WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1;
775 /*+ Leading(*VALUES* t1 t2) (*VALUES* t1)(*VALUES* t1 t2)*/
776 EXPLAIN SELECT * FROM s1.t1, s1.t2, (VALUES(1,1,1,'1')) AS t3 (c1, c2, c3, c4) WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1;
777
778 -- No. R-2-4-2
779 EXPLAIN SELECT * FROM s1.t1, s1.t2, (VALUES(1,1,1,'1')) AS t3 (c1, c2, c3, c4), (VALUES(1,1,1,'1'), (2,2,2,'2')) AS t4 (c1, c2, c3, c4) WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
780 /*+ Leading(t4 t3 t2 t1) (t4 t3)(t4 t3 t2)(t4 t3 t2 t1)*/
781 EXPLAIN SELECT * FROM s1.t1, s1.t2, (VALUES(1,1,1,'1')) AS t3 (c1, c2, c3, c4), (VALUES(1,1,1,'1'), (2,2,2,'2')) AS t4 (c1, c2, c3, c4) WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
782 /*+ Leading(*VALUES* t3 t2 t1) (t4 t3)(*VALUES* t3 t2)(*VALUES* t3 t2 t1)*/
783 EXPLAIN SELECT * FROM s1.t1, s1.t2, (VALUES(1,1,1,'1')) AS t3 (c1, c2, c3, c4), (VALUES(1,1,1,'1'), (2,2,2,'2')) AS t4 (c1, c2, c3, c4) WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
784
785 ----
786 ---- No. R-2-5
787 ----
788
789 ----
790 ---- No. R-3-1 
791 ----
792
793 ----
794 ---- No. R-3-2 join inherit tables
795 ----
796 EXPLAIN SELECT * FROM s1.p1, s1.p2 WHERE p1.c1 = p2.c1;
797
798 -- No. R-3-2-1
799 /*+(p1 p2)*/
800 EXPLAIN SELECT * FROM s1.p1, s1.p2 WHERE p1.c1 = p2.c1;
801
802 -- No. R-3-2-2
803 /*+(p1c1 p2c1)*/
804 EXPLAIN SELECT * FROM s1.p1, s1.p2 WHERE p1.c1 = p2.c1;
805
806 ----
807 ---- No. R-3-5 conflict join method hint
808 ----
809 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
810
811 -- No. R-3-5-1
812 /*+(t1 t2)(t1 t2)*/
813 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
814
815 -- No. R-3-5-2
816 /*+(t1 t2)(t1 t2)(t1 t2)*/
817 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
818
819 -- No. R-3-5-3
820 /*+(t1 t2)(t2 t1)*/
821 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
822
823 -- No. R-3-5-4
824 /*+(t2 t1)(t1 t2)(t2 t1)*/
825 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
826
827 ----
828 ---- No. R-3-6 hint state output
829 ----
830
831 -- No. R-3-6-1
832 /*+(t1 t2)*/
833 SELECT * FROM s1.t1, s1.t2 WHERE false;