12
12
Flattened because of dependency, t10=func(t1)
13
13
explain select * from t1 where a in (select pk from t10);
14
14
id select_type table type possible_keys key key_len ref rows Extra
15
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 Using where
16
2 SUBQUERY t10 index NULL PRIMARY 4 NULL 10 Using index
15
1 PRIMARY t1 ALL NULL NULL NULL NULL 3
16
1 PRIMARY t10 eq_ref PRIMARY PRIMARY 4 test.t1.a 1 Using index
17
17
select * from t1 where a in (select pk from t10);
22
22
A confluent case of dependency
23
23
explain select * from t1 where a in (select a from t10 where pk=12);
24
24
id select_type table type possible_keys key key_len ref rows Extra
25
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 Using where
26
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
25
1 PRIMARY t1 ALL NULL NULL NULL NULL 3
26
1 PRIMARY t10 const PRIMARY PRIMARY 4 const 1 Using where
27
27
select * from t1 where a in (select a from t10 where pk=12);
29
29
An empty table inside
30
30
explain select * from t1 where a in (select a from t11);
31
31
id select_type table type possible_keys key key_len ref rows Extra
32
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 Using where
33
2 SUBQUERY t11 ALL NULL NULL NULL NULL 1
32
1 PRIMARY t11 ALL NULL NULL NULL NULL 1 Start temporary
33
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 Using where; End temporary; Using join buffer
34
34
select * from t1 where a in (select a from t11);
36
36
explain select * from t1 where a in (select pk from t10) and b in (select pk from t10);
37
37
id select_type table type possible_keys key key_len ref rows Extra
38
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 Using where
39
3 SUBQUERY t10 index NULL PRIMARY 4 NULL 10 Using index
40
2 SUBQUERY t10 index NULL PRIMARY 4 NULL 10 Using index
38
1 PRIMARY t1 ALL NULL NULL NULL NULL 3
39
1 PRIMARY t10 eq_ref PRIMARY PRIMARY 4 test.t1.a 1 Using index
40
1 PRIMARY t10 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 Using index
41
41
select * from t1 where a in (select pk from t10) and b in (select pk from t10);
46
46
flattening a nested subquery
47
47
explain select * from t1 where a in (select pk from t10 where t10.a in (select pk from t12));
48
48
id select_type table type possible_keys key key_len ref rows Extra
49
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 Using where
50
2 SUBQUERY t10 ALL NULL NULL NULL NULL 10 Using where
51
3 SUBQUERY t12 index NULL PRIMARY 4 NULL 10 Using index
49
1 PRIMARY t1 ALL NULL NULL NULL NULL 3
50
1 PRIMARY t10 eq_ref PRIMARY PRIMARY 4 test.t1.a 1
51
1 PRIMARY t12 eq_ref PRIMARY PRIMARY 4 test.t10.a 1 Using index
52
52
select * from t1 where a in (select pk from t10 where t10.a in (select pk from t12));
57
57
flattening subquery w/ several tables
58
58
explain extended select * from t1 where a in (select t10.pk from t10, t12 where t12.pk=t10.a);
59
59
id select_type table type possible_keys key key_len ref rows filtered Extra
60
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
61
2 SUBQUERY t10 ALL NULL NULL NULL NULL 10 100.00
62
2 SUBQUERY t12 eq_ref PRIMARY PRIMARY 4 test.t10.a 1 100.00 Using index
60
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00
61
1 PRIMARY t10 eq_ref PRIMARY PRIMARY 4 test.t1.a 1 100.00
62
1 PRIMARY t12 eq_ref PRIMARY PRIMARY 4 test.t10.a 1 100.00 Using index
64
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where <in_optimizer>(`test`.`t1`.`a`,`test`.`t1`.`a` in ( <materialize> (select `test`.`t10`.`pk` AS `pk` from `test`.`t10` join `test`.`t12` where (`test`.`t12`.`pk` = `test`.`t10`.`a`) ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on distinct_key)))
64
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from (`test`.`t10` join `test`.`t12`) join `test`.`t1` where ((`test`.`t10`.`pk` = `test`.`t1`.`a`) and (`test`.`t12`.`pk` = `test`.`t10`.`a`))
65
65
subqueries within outer joins go into ON expr.
67
67
t1 left join t2 on (t2.a= t1.a and t2.a in (select pk from t10))
73
69
insert into t1 select (A.a + 10 * B.a),1 from t0 A, t0 B;
74
70
explain extended select * from t1 where a in (select pk from t10 where pk<3);
75
71
id select_type table type possible_keys key key_len ref rows filtered Extra
76
72
1 PRIMARY t1 ALL NULL NULL NULL NULL 103 100.00 Using where
77
2 SUBQUERY t10 range PRIMARY PRIMARY 4 NULL 3 100.00 Using where; Using index
73
1 PRIMARY t10 eq_ref PRIMARY PRIMARY 4 test.t1.a 1 100.00 Using index
79
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where <in_optimizer>(`test`.`t1`.`a`,`test`.`t1`.`a` in ( <materialize> (select `test`.`t10`.`pk` AS `pk` from `test`.`t10` where (`test`.`t10`.`pk` < 3) ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on distinct_key)))
75
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from (`test`.`t10`) join `test`.`t1` where ((`test`.`t10`.`pk` = `test`.`t1`.`a`) and (`test`.`t1`.`a` < 3))
81
77
drop table t10, t11, t12;