drop table if exists t1,t2,t3,t4; create temporary table spj_counts_at_startup select counter_name, sum(val) as val from ndbinfo.counters where block_name='DBSPJ' group by counter_name; create temporary table spj_save_counts like spj_counts_at_startup; insert into spj_save_counts values ('SCAN_ROWS_RETURNED', 0); set @save_ndb_join_pushdown = @@session.ndb_join_pushdown; set ndb_join_pushdown = true; create table t1 ( a int not null, b int not null, c int not null, d int not null, primary key (`a`,`b`) ) engine=ndbcluster; insert into t1 values (1,1,1,1), (2,2,2,2), (3,3,3,3), (4,4,4,4), (1,2,5,1), (1,3,1,2), (1,4,2,3), (2,1,3,4), (2,3,4,5), (2,4,5,1), (3,1,1,2), (3,2,2,3), (3,4,3,4), (4,1,4,5), (4,2,5,1), (4,3,1,2); explain extended select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 16 100.00 Parent of 2 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t1.c 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t2`.`a` = `test`.`t1`.`b`)) select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c; a b c d a b c d 1 1 1 1 1 1 1 1 1 3 1 2 3 1 1 2 1 4 2 3 4 2 5 1 2 1 3 4 1 3 1 2 2 2 2 2 2 2 2 2 2 3 4 5 3 4 3 4 3 1 1 2 1 1 1 1 3 2 2 3 2 2 2 2 3 3 3 3 3 3 3 3 3 4 3 4 4 3 1 2 4 1 4 5 1 4 2 3 4 3 1 2 3 1 1 2 4 4 4 4 4 4 4 4 explain extended select straight_join count(*) from t1 as x1 join t1 as x2 on x1.d > x2.a + 1000 join t1 as x3 on x1.c=x3.a and x1.d=x3.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL NULL NULL NULL NULL 16 100.00 1 SIMPLE x2 ALL NULL NULL NULL NULL 16 100.00 Using where; Using join buffer (Block Nested Loop) 1 SIMPLE x3 eq_ref PRIMARY PRIMARY 8 test.x1.c,test.x1.d 1 100.00 Warnings: Note 9999 Can't push table 'x2' as child, 'type' must be a 'ref' access Note 9999 Cannot push table 'x3' as child of table 'x1'. Doing so would prevent using join buffer for table 'x2'. Note 9999 Cannot push table 'x3' as child of 'x2', since it referes to column 'x1.c' which will be stored in a join buffer. Note 1003 /* select#1 */ select straight_join count(0) AS `count(*)` from `test`.`t1` `x1` join `test`.`t1` `x2` join `test`.`t1` `x3` where ((`test`.`x3`.`b` = `test`.`x1`.`d`) and (`test`.`x3`.`a` = `test`.`x1`.`c`) and (`test`.`x1`.`d` > (`test`.`x2`.`a` + 1000))) select straight_join count(*) from t1 as x1 join t1 as x2 on x1.d > x2.a + 1000 join t1 as x3 on x1.c=x3.a and x1.d=x3.b; count(*) 0 explain extended select * from t1 as x1 join t1 as x2 on x1.a=1 and x1.c=x2.a and x1.d=x2.b join t1 as x3 join t1 as x4 where x4.a=x3.c and x4.b=x1.d; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE x2 eq_ref PRIMARY PRIMARY 8 test.x1.c,test.x1.d 1 100.00 Child of 'x1' in pushed join@1 1 SIMPLE x3 ALL NULL NULL NULL NULL 16 100.00 Using join buffer (Block Nested Loop) 1 SIMPLE x4 eq_ref PRIMARY PRIMARY 8 test.x3.c,test.x1.d 1 100.00 Warnings: Note 9999 Can't push table 'x3' as child, 'type' must be a 'ref' access Note 9999 Cannot push table 'x4' as child of table 'x1'. Doing so would prevent using join buffer for table 'x3'. Note 9999 Cannot push table 'x4' as child of 'x3', since it referes to column 'x1.d' which will be stored in a join buffer. Note 1003 /* select#1 */ select `test`.`x1`.`a` AS `a`,`test`.`x1`.`b` AS `b`,`test`.`x1`.`c` AS `c`,`test`.`x1`.`d` AS `d`,`test`.`x2`.`a` AS `a`,`test`.`x2`.`b` AS `b`,`test`.`x2`.`c` AS `c`,`test`.`x2`.`d` AS `d`,`test`.`x3`.`a` AS `a`,`test`.`x3`.`b` AS `b`,`test`.`x3`.`c` AS `c`,`test`.`x3`.`d` AS `d`,`test`.`x4`.`a` AS `a`,`test`.`x4`.`b` AS `b`,`test`.`x4`.`c` AS `c`,`test`.`x4`.`d` AS `d` from `test`.`t1` `x1` join `test`.`t1` `x2` join `test`.`t1` `x3` join `test`.`t1` `x4` where ((`test`.`x2`.`a` = `test`.`x1`.`c`) and (`test`.`x1`.`a` = 1) and (`test`.`x2`.`b` = `test`.`x1`.`d`) and (`test`.`x4`.`b` = `test`.`x1`.`d`) and (`test`.`x4`.`a` = `test`.`x3`.`c`)) select * from t1 as x1 join t1 as x2 on x1.a=1 and x1.c=x2.a and x1.d=x2.b join t1 as x3 join t1 as x4 where x4.a=x3.c and x4.b=x1.d; a b c d a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 4 2 3 2 1 3 4 1 1 1 1 1 1 1 1 2 1 3 4 3 1 1 2 1 1 1 1 1 1 1 1 2 2 2 2 2 1 3 4 1 1 1 1 1 1 1 1 2 3 4 5 4 1 4 5 1 1 1 1 1 1 1 1 3 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 3 2 2 3 2 1 3 4 1 1 1 1 1 1 1 1 3 3 3 3 3 1 1 2 1 1 1 1 1 1 1 1 3 4 3 4 3 1 1 2 1 1 1 1 1 1 1 1 4 1 4 5 4 1 4 5 1 1 1 1 1 1 1 1 4 3 1 2 1 1 1 1 1 1 1 1 1 1 1 1 4 4 4 4 4 1 4 5 1 3 1 2 1 2 5 1 1 1 1 1 1 2 5 1 1 3 1 2 1 2 5 1 1 3 1 2 1 2 5 1 1 3 1 2 1 2 5 1 1 4 2 3 2 2 2 2 1 3 1 2 1 2 5 1 2 1 3 4 3 2 2 3 1 3 1 2 1 2 5 1 2 2 2 2 2 2 2 2 1 3 1 2 1 2 5 1 2 3 4 5 4 2 5 1 1 3 1 2 1 2 5 1 3 1 1 2 1 2 5 1 1 3 1 2 1 2 5 1 3 2 2 3 2 2 2 2 1 3 1 2 1 2 5 1 3 3 3 3 3 2 2 3 1 3 1 2 1 2 5 1 3 4 3 4 3 2 2 3 1 3 1 2 1 2 5 1 4 1 4 5 4 2 5 1 1 3 1 2 1 2 5 1 4 3 1 2 1 2 5 1 1 3 1 2 1 2 5 1 4 4 4 4 4 2 5 1 1 4 2 3 2 3 4 5 1 1 1 1 1 3 1 2 1 4 2 3 2 3 4 5 1 3 1 2 1 3 1 2 1 4 2 3 2 3 4 5 1 4 2 3 2 3 4 5 1 4 2 3 2 3 4 5 2 1 3 4 3 3 3 3 1 4 2 3 2 3 4 5 2 2 2 2 2 3 4 5 1 4 2 3 2 3 4 5 2 3 4 5 4 3 1 2 1 4 2 3 2 3 4 5 3 1 1 2 1 3 1 2 1 4 2 3 2 3 4 5 3 2 2 3 2 3 4 5 1 4 2 3 2 3 4 5 3 3 3 3 3 3 3 3 1 4 2 3 2 3 4 5 3 4 3 4 3 3 3 3 1 4 2 3 2 3 4 5 4 1 4 5 4 3 1 2 1 4 2 3 2 3 4 5 4 3 1 2 1 3 1 2 1 4 2 3 2 3 4 5 4 4 4 4 4 3 1 2 explain extended select * from t1 left join t1 as t2 on t2.a = t1.b and t2.b = t1.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 16 100.00 Parent of 2 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t1.c 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t1` left join `test`.`t1` `t2` on(((`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t2`.`b` = `test`.`t1`.`c`))) where 1 select * from t1 left join t1 as t2 on t2.a = t1.b and t2.b = t1.c; a b c d a b c d 1 1 1 1 1 1 1 1 1 2 5 1 NULL NULL NULL NULL 1 3 1 2 3 1 1 2 1 4 2 3 4 2 5 1 2 1 3 4 1 3 1 2 2 2 2 2 2 2 2 2 2 3 4 5 3 4 3 4 2 4 5 1 NULL NULL NULL NULL 3 1 1 2 1 1 1 1 3 2 2 3 2 2 2 2 3 3 3 3 3 3 3 3 3 4 3 4 4 3 1 2 4 1 4 5 1 4 2 3 4 2 5 1 NULL NULL NULL NULL 4 3 1 2 3 1 1 2 4 4 4 4 4 4 4 4 explain extended select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 16 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t1.c 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t2.b 1 100.00 Child of 't1' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t3`.`b` = `test`.`t1`.`c`) and (`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t3`.`a` = `test`.`t1`.`b`)) select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b; a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 2 3 1 1 2 3 1 1 2 1 4 2 3 4 2 5 1 4 2 5 1 2 1 3 4 1 3 1 2 1 3 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 4 5 3 4 3 4 3 4 3 4 3 1 1 2 1 1 1 1 1 1 1 1 3 2 2 3 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 4 3 1 2 4 3 1 2 4 1 4 5 1 4 2 3 1 4 2 3 4 3 1 2 3 1 1 2 3 1 1 2 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c left join t1 as t3 on t3.a = t2.a and t3.b = t2.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 16 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t1.c 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t2.a,test.t2.b 1 100.00 Child of 't1' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` left join `test`.`t1` `t3` on(((`test`.`t3`.`b` = `test`.`t1`.`c`) and (`test`.`t3`.`a` = `test`.`t1`.`b`))) where ((`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t2`.`a` = `test`.`t1`.`b`)) select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c left join t1 as t3 on t3.a = t2.a and t3.b = t2.b; a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 2 3 1 1 2 3 1 1 2 1 4 2 3 4 2 5 1 4 2 5 1 2 1 3 4 1 3 1 2 1 3 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 4 5 3 4 3 4 3 4 3 4 3 1 1 2 1 1 1 1 1 1 1 1 3 2 2 3 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 4 3 1 2 4 3 1 2 4 1 4 5 1 4 2 3 1 4 2 3 4 3 1 2 3 1 1 2 3 1 1 2 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select * from t1 left join t1 as t2 on t2.a = t1.b and t2.b = t1.c left join t1 as t3 on t3.a = t2.a and t3.b = t2.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 16 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t1.c 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t2.a,test.t2.b 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` left join `test`.`t1` `t2` on(((`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t2`.`b` = `test`.`t1`.`c`))) left join `test`.`t1` `t3` on(((`test`.`t3`.`a` = `test`.`t2`.`a`) and (`test`.`t3`.`b` = `test`.`t2`.`b`))) where 1 select * from t1 left join t1 as t2 on t2.a = t1.b and t2.b = t1.c left join t1 as t3 on t3.a = t2.a and t3.b = t2.b; a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 2 5 1 NULL NULL NULL NULL NULL NULL NULL NULL 1 3 1 2 3 1 1 2 3 1 1 2 1 4 2 3 4 2 5 1 4 2 5 1 2 1 3 4 1 3 1 2 1 3 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 4 5 3 4 3 4 3 4 3 4 2 4 5 1 NULL NULL NULL NULL NULL NULL NULL NULL 3 1 1 2 1 1 1 1 1 1 1 1 3 2 2 3 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 4 3 1 2 4 3 1 2 4 1 4 5 1 4 2 3 1 4 2 3 4 2 5 1 NULL NULL NULL NULL NULL NULL NULL NULL 4 3 1 2 3 1 1 2 3 1 1 2 4 4 4 4 4 4 4 4 4 4 4 4 set ndb_join_pushdown=true; explain extended select * from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d procedure analyse(); id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 16 100.00 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Warnings: Note 9999 Table 't1' is not pushable: 'PROCEDURE'-clause post processing cannot be pushed. Note 9999 Table 't2' is not pushable: 'PROCEDURE'-clause post processing cannot be pushed. Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t2`.`b` = `test`.`t1`.`d`) and (`test`.`t2`.`a` = `test`.`t1`.`c`)) explain extended select * from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a = 2 and t1.b = 3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 const PRIMARY PRIMARY 8 const,const 1 100.00 Parent of 2 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t2`.`b` = `test`.`t1`.`d`) and (`test`.`t2`.`a` = `test`.`t1`.`c`) and (`test`.`t1`.`b` = 3) and (`test`.`t1`.`a` = 2)) select * from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a = 2 and t1.b = 3; a b c d a b c d explain extended select * from t1 left join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a = 2 and t1.b = 3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 const PRIMARY PRIMARY 8 const,const 1 100.00 Parent of 2 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t1` left join `test`.`t1` `t2` on(((`test`.`t2`.`b` = `test`.`t1`.`d`) and (`test`.`t2`.`a` = `test`.`t1`.`c`))) where ((`test`.`t1`.`b` = 3) and (`test`.`t1`.`a` = 2)) select * from t1 left join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a = 2 and t1.b = 3; a b c d a b c d 2 3 4 5 NULL NULL NULL NULL explain extended select * from t1 left join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a = 2 and t1.b = 3 order by t1.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 const PRIMARY PRIMARY 8 const,const 1 100.00 Parent of 2 pushed join@1; Using where; Using filesort 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t1` left join `test`.`t1` `t2` on(((`test`.`t2`.`b` = `test`.`t1`.`d`) and (`test`.`t2`.`a` = `test`.`t1`.`c`))) where ((`test`.`t1`.`b` = 3) and (`test`.`t1`.`a` = 2)) order by `test`.`t1`.`c` select * from t1 left join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a = 2 and t1.b = 3 order by t1.c; a b c d a b c d 2 3 4 5 NULL NULL NULL NULL set ndb_join_pushdown=false; explain extended select * from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a = 2 and t1.b = 3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables Warnings: Note 1003 /* select#1 */ select '2' AS `a`,'3' AS `b`,'4' AS `c`,'5' AS `d`,NULL AS `a`,NULL AS `b`,NULL AS `c`,NULL AS `d` from `test`.`t1` join `test`.`t1` `t2` where 0 select * from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a = 2 and t1.b = 3; a b c d a b c d explain extended select * from t1 left join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a = 2 and t1.b = 3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 const PRIMARY PRIMARY 8 const,const 1 100.00 1 SIMPLE t2 const PRIMARY PRIMARY 8 const,const 0 0.00 unique row not found Warnings: Note 1003 /* select#1 */ select '2' AS `a`,'3' AS `b`,'4' AS `c`,'5' AS `d`,NULL AS `a`,NULL AS `b`,NULL AS `c`,NULL AS `d` from `test`.`t1` left join `test`.`t1` `t2` on((multiple equal('4', NULL) and multiple equal('5', NULL))) where 1 select * from t1 left join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a = 2 and t1.b = 3; a b c d a b c d 2 3 4 5 NULL NULL NULL NULL set ndb_join_pushdown=true; explain extended select * from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a = 1 and t1.b = 1; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 const PRIMARY PRIMARY 8 const,const 1 100.00 Parent of 2 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t2`.`b` = `test`.`t1`.`d`) and (`test`.`t2`.`a` = `test`.`t1`.`c`) and (`test`.`t1`.`b` = 1) and (`test`.`t1`.`a` = 1)) select * from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a = 1 and t1.b = 1; a b c d a b c d 1 1 1 1 1 1 1 1 explain extended select * from t1 left join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a = 1 and t1.b = 1; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 const PRIMARY PRIMARY 8 const,const 1 100.00 Parent of 2 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t1` left join `test`.`t1` `t2` on(((`test`.`t2`.`b` = `test`.`t1`.`d`) and (`test`.`t2`.`a` = `test`.`t1`.`c`))) where ((`test`.`t1`.`b` = 1) and (`test`.`t1`.`a` = 1)) select * from t1 left join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a = 1 and t1.b = 1; a b c d a b c d 1 1 1 1 1 1 1 1 set ndb_join_pushdown=false; explain extended select * from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a = 1 and t1.b = 1; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 const PRIMARY PRIMARY 8 const,const 1 100.00 1 SIMPLE t2 const PRIMARY PRIMARY 8 const,const 1 100.00 Warnings: Note 1003 /* select#1 */ select '1' AS `a`,'1' AS `b`,'1' AS `c`,'1' AS `d`,'1' AS `a`,'1' AS `b`,'1' AS `c`,'1' AS `d` from `test`.`t1` join `test`.`t1` `t2` where 1 select * from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a = 1 and t1.b = 1; a b c d a b c d 1 1 1 1 1 1 1 1 explain extended select * from t1 left join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a = 1 and t1.b = 1; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 const PRIMARY PRIMARY 8 const,const 1 100.00 1 SIMPLE t2 const PRIMARY PRIMARY 8 const,const 1 100.00 Warnings: Note 1003 /* select#1 */ select '1' AS `a`,'1' AS `b`,'1' AS `c`,'1' AS `d`,'1' AS `a`,'1' AS `b`,'1' AS `c`,'1' AS `d` from `test`.`t1` left join `test`.`t1` `t2` on((multiple equal('1', '1') and multiple equal('1', '1'))) where 1 select * from t1 left join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a = 1 and t1.b = 1; a b c d a b c d 1 1 1 1 1 1 1 1 set ndb_join_pushdown=true; explain extended select * from t1 join t1 as t2 on t2.a = t1.c join t1 as t3 on t3.a = t1.c and t3.b = t2.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 16 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 ref PRIMARY PRIMARY 4 test.t1.c 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t2.b 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t3`.`b` = `test`.`t2`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`c`) and (`test`.`t3`.`a` = `test`.`t1`.`c`)) select * from t1 join t1 as t2 on t2.a = t1.c join t1 as t3 on t3.a = t1.c and t3.b = t2.b; a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 5 1 1 2 5 1 1 1 1 1 1 3 1 2 1 3 1 2 1 1 1 1 1 4 2 3 1 4 2 3 1 3 1 2 1 1 1 1 1 1 1 1 1 3 1 2 1 2 5 1 1 2 5 1 1 3 1 2 1 3 1 2 1 3 1 2 1 3 1 2 1 4 2 3 1 4 2 3 1 4 2 3 2 1 3 4 2 1 3 4 1 4 2 3 2 2 2 2 2 2 2 2 1 4 2 3 2 3 4 5 2 3 4 5 1 4 2 3 2 4 5 1 2 4 5 1 2 1 3 4 3 1 1 2 3 1 1 2 2 1 3 4 3 2 2 3 3 2 2 3 2 1 3 4 3 3 3 3 3 3 3 3 2 1 3 4 3 4 3 4 3 4 3 4 2 2 2 2 2 1 3 4 2 1 3 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 4 5 2 3 4 5 2 2 2 2 2 4 5 1 2 4 5 1 2 3 4 5 4 1 4 5 4 1 4 5 2 3 4 5 4 2 5 1 4 2 5 1 2 3 4 5 4 3 1 2 4 3 1 2 2 3 4 5 4 4 4 4 4 4 4 4 3 1 1 2 1 1 1 1 1 1 1 1 3 1 1 2 1 2 5 1 1 2 5 1 3 1 1 2 1 3 1 2 1 3 1 2 3 1 1 2 1 4 2 3 1 4 2 3 3 2 2 3 2 1 3 4 2 1 3 4 3 2 2 3 2 2 2 2 2 2 2 2 3 2 2 3 2 3 4 5 2 3 4 5 3 2 2 3 2 4 5 1 2 4 5 1 3 3 3 3 3 1 1 2 3 1 1 2 3 3 3 3 3 2 2 3 3 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 3 4 3 4 3 4 3 4 3 1 1 2 3 1 1 2 3 4 3 4 3 2 2 3 3 2 2 3 3 4 3 4 3 3 3 3 3 3 3 3 3 4 3 4 3 4 3 4 3 4 3 4 4 1 4 5 4 1 4 5 4 1 4 5 4 1 4 5 4 2 5 1 4 2 5 1 4 1 4 5 4 3 1 2 4 3 1 2 4 1 4 5 4 4 4 4 4 4 4 4 4 3 1 2 1 1 1 1 1 1 1 1 4 3 1 2 1 2 5 1 1 2 5 1 4 3 1 2 1 3 1 2 1 3 1 2 4 3 1 2 1 4 2 3 1 4 2 3 4 4 4 4 4 1 4 5 4 1 4 5 4 4 4 4 4 2 5 1 4 2 5 1 4 4 4 4 4 3 1 2 4 3 1 2 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select straight_join * from (t1 as x cross join t1 as y) join t1 as z on z.a=x.a and z.b=y.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL PRIMARY NULL NULL NULL 16 100.00 1 SIMPLE y ALL NULL NULL NULL NULL 16 100.00 Using join buffer (Block Nested Loop) 1 SIMPLE z eq_ref PRIMARY PRIMARY 8 test.x.a,test.y.b 1 100.00 Warnings: Note 9999 Can't push table 'y' as child, 'type' must be a 'ref' access Note 9999 Cannot push table 'z' as child of table 'x'. Doing so would prevent using join buffer for table 'y'. Note 9999 Cannot push table 'z' as child of 'y', since it referes to column 'x.a' which will be stored in a join buffer. Note 1003 /* select#1 */ select straight_join `test`.`x`.`a` AS `a`,`test`.`x`.`b` AS `b`,`test`.`x`.`c` AS `c`,`test`.`x`.`d` AS `d`,`test`.`y`.`a` AS `a`,`test`.`y`.`b` AS `b`,`test`.`y`.`c` AS `c`,`test`.`y`.`d` AS `d`,`test`.`z`.`a` AS `a`,`test`.`z`.`b` AS `b`,`test`.`z`.`c` AS `c`,`test`.`z`.`d` AS `d` from `test`.`t1` `x` join `test`.`t1` `y` join `test`.`t1` `z` where ((`test`.`z`.`b` = `test`.`y`.`b`) and (`test`.`z`.`a` = `test`.`x`.`a`)) select straight_join * from (t1 as x cross join t1 as y) join t1 as z on z.a=x.a and z.b=y.b; a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 5 1 1 2 5 1 1 1 1 1 1 3 1 2 1 3 1 2 1 1 1 1 1 4 2 3 1 4 2 3 1 1 1 1 2 1 3 4 1 1 1 1 1 1 1 1 2 2 2 2 1 2 5 1 1 1 1 1 2 3 4 5 1 3 1 2 1 1 1 1 2 4 5 1 1 4 2 3 1 1 1 1 3 1 1 2 1 1 1 1 1 1 1 1 3 2 2 3 1 2 5 1 1 1 1 1 3 3 3 3 1 3 1 2 1 1 1 1 3 4 3 4 1 4 2 3 1 1 1 1 4 1 4 5 1 1 1 1 1 1 1 1 4 2 5 1 1 2 5 1 1 1 1 1 4 3 1 2 1 3 1 2 1 1 1 1 4 4 4 4 1 4 2 3 1 2 5 1 1 1 1 1 1 1 1 1 1 2 5 1 1 2 5 1 1 2 5 1 1 2 5 1 1 3 1 2 1 3 1 2 1 2 5 1 1 4 2 3 1 4 2 3 1 2 5 1 2 1 3 4 1 1 1 1 1 2 5 1 2 2 2 2 1 2 5 1 1 2 5 1 2 3 4 5 1 3 1 2 1 2 5 1 2 4 5 1 1 4 2 3 1 2 5 1 3 1 1 2 1 1 1 1 1 2 5 1 3 2 2 3 1 2 5 1 1 2 5 1 3 3 3 3 1 3 1 2 1 2 5 1 3 4 3 4 1 4 2 3 1 2 5 1 4 1 4 5 1 1 1 1 1 2 5 1 4 2 5 1 1 2 5 1 1 2 5 1 4 3 1 2 1 3 1 2 1 2 5 1 4 4 4 4 1 4 2 3 1 3 1 2 1 1 1 1 1 1 1 1 1 3 1 2 1 2 5 1 1 2 5 1 1 3 1 2 1 3 1 2 1 3 1 2 1 3 1 2 1 4 2 3 1 4 2 3 1 3 1 2 2 1 3 4 1 1 1 1 1 3 1 2 2 2 2 2 1 2 5 1 1 3 1 2 2 3 4 5 1 3 1 2 1 3 1 2 2 4 5 1 1 4 2 3 1 3 1 2 3 1 1 2 1 1 1 1 1 3 1 2 3 2 2 3 1 2 5 1 1 3 1 2 3 3 3 3 1 3 1 2 1 3 1 2 3 4 3 4 1 4 2 3 1 3 1 2 4 1 4 5 1 1 1 1 1 3 1 2 4 2 5 1 1 2 5 1 1 3 1 2 4 3 1 2 1 3 1 2 1 3 1 2 4 4 4 4 1 4 2 3 1 4 2 3 1 1 1 1 1 1 1 1 1 4 2 3 1 2 5 1 1 2 5 1 1 4 2 3 1 3 1 2 1 3 1 2 1 4 2 3 1 4 2 3 1 4 2 3 1 4 2 3 2 1 3 4 1 1 1 1 1 4 2 3 2 2 2 2 1 2 5 1 1 4 2 3 2 3 4 5 1 3 1 2 1 4 2 3 2 4 5 1 1 4 2 3 1 4 2 3 3 1 1 2 1 1 1 1 1 4 2 3 3 2 2 3 1 2 5 1 1 4 2 3 3 3 3 3 1 3 1 2 1 4 2 3 3 4 3 4 1 4 2 3 1 4 2 3 4 1 4 5 1 1 1 1 1 4 2 3 4 2 5 1 1 2 5 1 1 4 2 3 4 3 1 2 1 3 1 2 1 4 2 3 4 4 4 4 1 4 2 3 2 1 3 4 1 1 1 1 2 1 3 4 2 1 3 4 1 2 5 1 2 2 2 2 2 1 3 4 1 3 1 2 2 3 4 5 2 1 3 4 1 4 2 3 2 4 5 1 2 1 3 4 2 1 3 4 2 1 3 4 2 1 3 4 2 2 2 2 2 2 2 2 2 1 3 4 2 3 4 5 2 3 4 5 2 1 3 4 2 4 5 1 2 4 5 1 2 1 3 4 3 1 1 2 2 1 3 4 2 1 3 4 3 2 2 3 2 2 2 2 2 1 3 4 3 3 3 3 2 3 4 5 2 1 3 4 3 4 3 4 2 4 5 1 2 1 3 4 4 1 4 5 2 1 3 4 2 1 3 4 4 2 5 1 2 2 2 2 2 1 3 4 4 3 1 2 2 3 4 5 2 1 3 4 4 4 4 4 2 4 5 1 2 2 2 2 1 1 1 1 2 1 3 4 2 2 2 2 1 2 5 1 2 2 2 2 2 2 2 2 1 3 1 2 2 3 4 5 2 2 2 2 1 4 2 3 2 4 5 1 2 2 2 2 2 1 3 4 2 1 3 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 4 5 2 3 4 5 2 2 2 2 2 4 5 1 2 4 5 1 2 2 2 2 3 1 1 2 2 1 3 4 2 2 2 2 3 2 2 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 4 5 2 2 2 2 3 4 3 4 2 4 5 1 2 2 2 2 4 1 4 5 2 1 3 4 2 2 2 2 4 2 5 1 2 2 2 2 2 2 2 2 4 3 1 2 2 3 4 5 2 2 2 2 4 4 4 4 2 4 5 1 2 3 4 5 1 1 1 1 2 1 3 4 2 3 4 5 1 2 5 1 2 2 2 2 2 3 4 5 1 3 1 2 2 3 4 5 2 3 4 5 1 4 2 3 2 4 5 1 2 3 4 5 2 1 3 4 2 1 3 4 2 3 4 5 2 2 2 2 2 2 2 2 2 3 4 5 2 3 4 5 2 3 4 5 2 3 4 5 2 4 5 1 2 4 5 1 2 3 4 5 3 1 1 2 2 1 3 4 2 3 4 5 3 2 2 3 2 2 2 2 2 3 4 5 3 3 3 3 2 3 4 5 2 3 4 5 3 4 3 4 2 4 5 1 2 3 4 5 4 1 4 5 2 1 3 4 2 3 4 5 4 2 5 1 2 2 2 2 2 3 4 5 4 3 1 2 2 3 4 5 2 3 4 5 4 4 4 4 2 4 5 1 2 4 5 1 1 1 1 1 2 1 3 4 2 4 5 1 1 2 5 1 2 2 2 2 2 4 5 1 1 3 1 2 2 3 4 5 2 4 5 1 1 4 2 3 2 4 5 1 2 4 5 1 2 1 3 4 2 1 3 4 2 4 5 1 2 2 2 2 2 2 2 2 2 4 5 1 2 3 4 5 2 3 4 5 2 4 5 1 2 4 5 1 2 4 5 1 2 4 5 1 3 1 1 2 2 1 3 4 2 4 5 1 3 2 2 3 2 2 2 2 2 4 5 1 3 3 3 3 2 3 4 5 2 4 5 1 3 4 3 4 2 4 5 1 2 4 5 1 4 1 4 5 2 1 3 4 2 4 5 1 4 2 5 1 2 2 2 2 2 4 5 1 4 3 1 2 2 3 4 5 2 4 5 1 4 4 4 4 2 4 5 1 3 1 1 2 1 1 1 1 3 1 1 2 3 1 1 2 1 2 5 1 3 2 2 3 3 1 1 2 1 3 1 2 3 3 3 3 3 1 1 2 1 4 2 3 3 4 3 4 3 1 1 2 2 1 3 4 3 1 1 2 3 1 1 2 2 2 2 2 3 2 2 3 3 1 1 2 2 3 4 5 3 3 3 3 3 1 1 2 2 4 5 1 3 4 3 4 3 1 1 2 3 1 1 2 3 1 1 2 3 1 1 2 3 2 2 3 3 2 2 3 3 1 1 2 3 3 3 3 3 3 3 3 3 1 1 2 3 4 3 4 3 4 3 4 3 1 1 2 4 1 4 5 3 1 1 2 3 1 1 2 4 2 5 1 3 2 2 3 3 1 1 2 4 3 1 2 3 3 3 3 3 1 1 2 4 4 4 4 3 4 3 4 3 2 2 3 1 1 1 1 3 1 1 2 3 2 2 3 1 2 5 1 3 2 2 3 3 2 2 3 1 3 1 2 3 3 3 3 3 2 2 3 1 4 2 3 3 4 3 4 3 2 2 3 2 1 3 4 3 1 1 2 3 2 2 3 2 2 2 2 3 2 2 3 3 2 2 3 2 3 4 5 3 3 3 3 3 2 2 3 2 4 5 1 3 4 3 4 3 2 2 3 3 1 1 2 3 1 1 2 3 2 2 3 3 2 2 3 3 2 2 3 3 2 2 3 3 3 3 3 3 3 3 3 3 2 2 3 3 4 3 4 3 4 3 4 3 2 2 3 4 1 4 5 3 1 1 2 3 2 2 3 4 2 5 1 3 2 2 3 3 2 2 3 4 3 1 2 3 3 3 3 3 2 2 3 4 4 4 4 3 4 3 4 3 3 3 3 1 1 1 1 3 1 1 2 3 3 3 3 1 2 5 1 3 2 2 3 3 3 3 3 1 3 1 2 3 3 3 3 3 3 3 3 1 4 2 3 3 4 3 4 3 3 3 3 2 1 3 4 3 1 1 2 3 3 3 3 2 2 2 2 3 2 2 3 3 3 3 3 2 3 4 5 3 3 3 3 3 3 3 3 2 4 5 1 3 4 3 4 3 3 3 3 3 1 1 2 3 1 1 2 3 3 3 3 3 2 2 3 3 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 3 4 3 4 3 3 3 3 4 1 4 5 3 1 1 2 3 3 3 3 4 2 5 1 3 2 2 3 3 3 3 3 4 3 1 2 3 3 3 3 3 3 3 3 4 4 4 4 3 4 3 4 3 4 3 4 1 1 1 1 3 1 1 2 3 4 3 4 1 2 5 1 3 2 2 3 3 4 3 4 1 3 1 2 3 3 3 3 3 4 3 4 1 4 2 3 3 4 3 4 3 4 3 4 2 1 3 4 3 1 1 2 3 4 3 4 2 2 2 2 3 2 2 3 3 4 3 4 2 3 4 5 3 3 3 3 3 4 3 4 2 4 5 1 3 4 3 4 3 4 3 4 3 1 1 2 3 1 1 2 3 4 3 4 3 2 2 3 3 2 2 3 3 4 3 4 3 3 3 3 3 3 3 3 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 4 1 4 5 3 1 1 2 3 4 3 4 4 2 5 1 3 2 2 3 3 4 3 4 4 3 1 2 3 3 3 3 3 4 3 4 4 4 4 4 3 4 3 4 4 1 4 5 1 1 1 1 4 1 4 5 4 1 4 5 1 2 5 1 4 2 5 1 4 1 4 5 1 3 1 2 4 3 1 2 4 1 4 5 1 4 2 3 4 4 4 4 4 1 4 5 2 1 3 4 4 1 4 5 4 1 4 5 2 2 2 2 4 2 5 1 4 1 4 5 2 3 4 5 4 3 1 2 4 1 4 5 2 4 5 1 4 4 4 4 4 1 4 5 3 1 1 2 4 1 4 5 4 1 4 5 3 2 2 3 4 2 5 1 4 1 4 5 3 3 3 3 4 3 1 2 4 1 4 5 3 4 3 4 4 4 4 4 4 1 4 5 4 1 4 5 4 1 4 5 4 1 4 5 4 2 5 1 4 2 5 1 4 1 4 5 4 3 1 2 4 3 1 2 4 1 4 5 4 4 4 4 4 4 4 4 4 2 5 1 1 1 1 1 4 1 4 5 4 2 5 1 1 2 5 1 4 2 5 1 4 2 5 1 1 3 1 2 4 3 1 2 4 2 5 1 1 4 2 3 4 4 4 4 4 2 5 1 2 1 3 4 4 1 4 5 4 2 5 1 2 2 2 2 4 2 5 1 4 2 5 1 2 3 4 5 4 3 1 2 4 2 5 1 2 4 5 1 4 4 4 4 4 2 5 1 3 1 1 2 4 1 4 5 4 2 5 1 3 2 2 3 4 2 5 1 4 2 5 1 3 3 3 3 4 3 1 2 4 2 5 1 3 4 3 4 4 4 4 4 4 2 5 1 4 1 4 5 4 1 4 5 4 2 5 1 4 2 5 1 4 2 5 1 4 2 5 1 4 3 1 2 4 3 1 2 4 2 5 1 4 4 4 4 4 4 4 4 4 3 1 2 1 1 1 1 4 1 4 5 4 3 1 2 1 2 5 1 4 2 5 1 4 3 1 2 1 3 1 2 4 3 1 2 4 3 1 2 1 4 2 3 4 4 4 4 4 3 1 2 2 1 3 4 4 1 4 5 4 3 1 2 2 2 2 2 4 2 5 1 4 3 1 2 2 3 4 5 4 3 1 2 4 3 1 2 2 4 5 1 4 4 4 4 4 3 1 2 3 1 1 2 4 1 4 5 4 3 1 2 3 2 2 3 4 2 5 1 4 3 1 2 3 3 3 3 4 3 1 2 4 3 1 2 3 4 3 4 4 4 4 4 4 3 1 2 4 1 4 5 4 1 4 5 4 3 1 2 4 2 5 1 4 2 5 1 4 3 1 2 4 3 1 2 4 3 1 2 4 3 1 2 4 4 4 4 4 4 4 4 4 4 4 4 1 1 1 1 4 1 4 5 4 4 4 4 1 2 5 1 4 2 5 1 4 4 4 4 1 3 1 2 4 3 1 2 4 4 4 4 1 4 2 3 4 4 4 4 4 4 4 4 2 1 3 4 4 1 4 5 4 4 4 4 2 2 2 2 4 2 5 1 4 4 4 4 2 3 4 5 4 3 1 2 4 4 4 4 2 4 5 1 4 4 4 4 4 4 4 4 3 1 1 2 4 1 4 5 4 4 4 4 3 2 2 3 4 2 5 1 4 4 4 4 3 3 3 3 4 3 1 2 4 4 4 4 3 4 3 4 4 4 4 4 4 4 4 4 4 1 4 5 4 1 4 5 4 4 4 4 4 2 5 1 4 2 5 1 4 4 4 4 4 3 1 2 4 3 1 2 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select * from t1 straight_join t1 as t2 on t2.a = t1.b+0 and t2.b = t1.c straight_join t1 as t3 on t3.a = t1.b and t3.b = t2.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 16 100.00 Parent of 2 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 func,test.t1.c 1 100.00 Using where 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t2.b 1 100.00 Child of 't1' in pushed join@1; Using where Warnings: Note 9999 Can't push table 't2' as child, column 'a' does neither 'ref' a column nor a constant Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` straight_join `test`.`t1` `t2` straight_join `test`.`t1` `t3` where ((`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t3`.`b` = `test`.`t1`.`c`) and (`test`.`t3`.`a` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = (`test`.`t1`.`b` + 0))) select * from t1 straight_join t1 as t2 on t2.a = t1.b+0 and t2.b = t1.c straight_join t1 as t3 on t3.a = t1.b and t3.b = t2.b; a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 2 3 1 1 2 3 1 1 2 1 4 2 3 4 2 5 1 4 2 5 1 2 1 3 4 1 3 1 2 1 3 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 4 5 3 4 3 4 3 4 3 4 3 1 1 2 1 1 1 1 1 1 1 1 3 2 2 3 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 4 3 1 2 4 3 1 2 4 1 4 5 1 4 2 3 1 4 2 3 4 3 1 2 3 1 1 2 3 1 1 2 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select * from t1 straight_join t1 as t2 on t2.a = t1.b+0 and t2.b = t1.c straight_join t1 as t3 on t3.a = t1.b and t3.b = t2.b where t1.a=1 and t1.d=1; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`t1`.`d` = 1) 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 func,test.t1.c 1 100.00 Using where 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t2.b 1 100.00 Child of 't1' in pushed join@1; Using where Warnings: Note 9999 Can't push table 't2' as child, column 'a' does neither 'ref' a column nor a constant Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` straight_join `test`.`t1` `t2` straight_join `test`.`t1` `t3` where ((`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t3`.`b` = `test`.`t1`.`c`) and (`test`.`t3`.`a` = `test`.`t1`.`b`) and (`test`.`t1`.`d` = 1) and (`test`.`t1`.`a` = 1) and (`test`.`t2`.`a` = (`test`.`t1`.`b` + 0))) select * from t1 straight_join t1 as t2 on t2.a = t1.b+0 and t2.b = t1.c straight_join t1 as t3 on t3.a = t1.b and t3.b = t2.b where t1.a=1 and t1.d=1; a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 explain extended select * from t1 straight_join t1 as t2 on t2.a = t1.b+0 straight_join t1 as t3 on t3.a = t1.b and t3.b = t2.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 16 100.00 1 SIMPLE t2 ref PRIMARY PRIMARY 4 func 1 100.00 Parent of 2 pushed join@1; Using where 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t2.b 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 9999 Can't push table 't2' as child, column 'a' does neither 'ref' a column nor a constant Note 9999 Can't push table 't3' as child of 't1', column 't2.b' is outside scope of pushable join Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` straight_join `test`.`t1` `t2` straight_join `test`.`t1` `t3` where ((`test`.`t3`.`b` = `test`.`t2`.`b`) and (`test`.`t3`.`a` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = (`test`.`t1`.`b` + 0))) select * from t1 straight_join t1 as t2 on t2.a = t1.b+0 straight_join t1 as t3 on t3.a = t1.b and t3.b = t2.b; a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 5 1 1 2 5 1 1 1 1 1 1 3 1 2 1 3 1 2 1 1 1 1 1 4 2 3 1 4 2 3 1 2 5 1 2 1 3 4 2 1 3 4 1 2 5 1 2 2 2 2 2 2 2 2 1 2 5 1 2 3 4 5 2 3 4 5 1 2 5 1 2 4 5 1 2 4 5 1 1 3 1 2 3 1 1 2 3 1 1 2 1 3 1 2 3 2 2 3 3 2 2 3 1 3 1 2 3 3 3 3 3 3 3 3 1 3 1 2 3 4 3 4 3 4 3 4 1 4 2 3 4 1 4 5 4 1 4 5 1 4 2 3 4 2 5 1 4 2 5 1 1 4 2 3 4 3 1 2 4 3 1 2 1 4 2 3 4 4 4 4 4 4 4 4 2 1 3 4 1 1 1 1 1 1 1 1 2 1 3 4 1 2 5 1 1 2 5 1 2 1 3 4 1 3 1 2 1 3 1 2 2 1 3 4 1 4 2 3 1 4 2 3 2 2 2 2 2 1 3 4 2 1 3 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 4 5 2 3 4 5 2 2 2 2 2 4 5 1 2 4 5 1 2 3 4 5 3 1 1 2 3 1 1 2 2 3 4 5 3 2 2 3 3 2 2 3 2 3 4 5 3 3 3 3 3 3 3 3 2 3 4 5 3 4 3 4 3 4 3 4 2 4 5 1 4 1 4 5 4 1 4 5 2 4 5 1 4 2 5 1 4 2 5 1 2 4 5 1 4 3 1 2 4 3 1 2 2 4 5 1 4 4 4 4 4 4 4 4 3 1 1 2 1 1 1 1 1 1 1 1 3 1 1 2 1 2 5 1 1 2 5 1 3 1 1 2 1 3 1 2 1 3 1 2 3 1 1 2 1 4 2 3 1 4 2 3 3 2 2 3 2 1 3 4 2 1 3 4 3 2 2 3 2 2 2 2 2 2 2 2 3 2 2 3 2 3 4 5 2 3 4 5 3 2 2 3 2 4 5 1 2 4 5 1 3 3 3 3 3 1 1 2 3 1 1 2 3 3 3 3 3 2 2 3 3 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 3 4 3 4 3 4 3 4 4 1 4 5 4 1 4 5 3 4 3 4 4 2 5 1 4 2 5 1 3 4 3 4 4 3 1 2 4 3 1 2 3 4 3 4 4 4 4 4 4 4 4 4 4 1 4 5 1 1 1 1 1 1 1 1 4 1 4 5 1 2 5 1 1 2 5 1 4 1 4 5 1 3 1 2 1 3 1 2 4 1 4 5 1 4 2 3 1 4 2 3 4 2 5 1 2 1 3 4 2 1 3 4 4 2 5 1 2 2 2 2 2 2 2 2 4 2 5 1 2 3 4 5 2 3 4 5 4 2 5 1 2 4 5 1 2 4 5 1 4 3 1 2 3 1 1 2 3 1 1 2 4 3 1 2 3 2 2 3 3 2 2 3 4 3 1 2 3 3 3 3 3 3 3 3 4 3 1 2 3 4 3 4 3 4 3 4 4 4 4 4 4 1 4 5 4 1 4 5 4 4 4 4 4 2 5 1 4 2 5 1 4 4 4 4 4 3 1 2 4 3 1 2 4 4 4 4 4 4 4 4 4 4 4 4 create table t1_myisam ( a int not null, b int not null, c int not null, d int not null, primary key (`a`,`b`) ) engine=myisam; insert into t1_myisam values (1,1,1,1), (2,2,1,1), (3,3,1,1), (4,4,1,1); set ndb_join_pushdown=true; explain extended select * from t1_myisam as t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d join t1 as t3 on t3.a = t2.a and t3.b = t2.b where t1.a=2 and t1.b=2; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 const PRIMARY PRIMARY 8 const,const 1 100.00 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 const,const 1 100.00 Parent of 2 pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 const,test.t2.b 1 100.00 Child of 't2' in pushed join@1; Using where Warnings: Note 9999 Table 't1' not in ndb engine, not pushable Note 1003 /* select#1 */ select '2' AS `a`,'2' AS `b`,'1' AS `c`,'1' AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1_myisam` `t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`b` = '1') and (`test`.`t3`.`b` = '1') and (`test`.`t2`.`a` = '1') and (`test`.`t3`.`a` = '1')) select * from t1_myisam as t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d join t1 as t3 on t3.a = t2.a and t3.b = t2.b where t1.a=2 and t1.b=2; a b c d a b c d a b c d 2 2 1 1 1 1 1 1 1 1 1 1 drop table t1_myisam; set ndb_join_pushdown=true; explain extended select * from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.d = 3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 16 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`t1`.`d` = 3) 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.c,const 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t2`.`a` = `test`.`t1`.`c`) and (`test`.`t1`.`d` = 3) and (`test`.`t2`.`b` = 3)) select * from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.d = 3; a b c d a b c d 1 4 2 3 2 3 4 5 3 2 2 3 2 3 4 5 3 3 3 3 3 3 3 3 explain extended select * from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a > 2 and t1.d = 3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 3 100.00 Parent of 2 pushed join@1; Using where with pushed condition: ((`test`.`t1`.`d` = 3) and (`test`.`t1`.`a` > 2)) 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.c,const 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t2`.`a` = `test`.`t1`.`c`) and (`test`.`t1`.`d` = 3) and (`test`.`t2`.`b` = 3) and (`test`.`t1`.`a` > 2)) select * from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.a > 2 and t1.d = 3; a b c d a b c d 3 2 2 3 2 3 4 5 3 3 3 3 3 3 3 3 explain extended select * from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.d = 3 order by t1.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 index NULL PRIMARY 8 NULL 16 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`t1`.`d` = 3) 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.c,const 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t2`.`a` = `test`.`t1`.`c`) and (`test`.`t1`.`d` = 3) and (`test`.`t2`.`b` = 3)) order by `test`.`t1`.`a` select * from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d where t1.d = 3 order by t1.a; a b c d a b c d 1 4 2 3 2 3 4 5 3 2 2 3 2 3 4 5 3 3 3 3 3 3 3 3 set ndb_join_pushdown=true; explain extended select * from t1 join t1 as t2 on t2.a = t1.c join t1 as t3 on t3.a = t2.c and t3.b = t2.d where t1.a = 1 and t1.b = 1; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 const PRIMARY PRIMARY 8 const,const 1 100.00 1 SIMPLE t2 ref PRIMARY PRIMARY 4 test.t1.c 1 100.00 Parent of 2 pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t2.c,test.t2.d 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 9999 Push of table 't2' as scan-child with lookup-root 't1' not implemented Note 9999 Can't push table 't3' as child of 't1', column 't2.c' is outside scope of pushable join Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`a` = `test`.`t1`.`c`) and (`test`.`t3`.`b` = `test`.`t2`.`d`) and (`test`.`t3`.`a` = `test`.`t2`.`c`) and (`test`.`t1`.`b` = 1) and (`test`.`t1`.`a` = 1)) select * from t1 join t1 as t2 on t2.a = t1.c join t1 as t3 on t3.a = t2.c and t3.b = t2.d where t1.a = 1 and t1.b = 1; a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 2 1 2 5 1 1 1 1 1 1 4 2 3 2 3 4 5 explain extended select * from t1 left join t1 as t2 on t2.a = t1.c left join t1 as t3 on t3.a = t2.c and t3.b = t2.d where t1.a = 1 and t1.b = 1; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 const PRIMARY PRIMARY 8 const,const 1 100.00 1 SIMPLE t2 ref PRIMARY PRIMARY 4 test.t1.c 1 100.00 Parent of 2 pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t2.c,test.t2.d 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 9999 Push of table 't2' as scan-child with lookup-root 't1' not implemented Note 9999 Can't push table 't3' as child of 't1', column 't2.c' is outside scope of pushable join Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` left join `test`.`t1` `t2` on((`test`.`t2`.`a` = `test`.`t1`.`c`)) left join `test`.`t1` `t3` on(((`test`.`t3`.`b` = `test`.`t2`.`d`) and (`test`.`t3`.`a` = `test`.`t2`.`c`))) where ((`test`.`t1`.`b` = 1) and (`test`.`t1`.`a` = 1)) select * from t1 left join t1 as t2 on t2.a = t1.c left join t1 as t3 on t3.a = t2.c and t3.b = t2.d where t1.a = 1 and t1.b = 1; a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 5 1 NULL NULL NULL NULL 1 1 1 1 1 3 1 2 1 2 5 1 1 1 1 1 1 4 2 3 2 3 4 5 set ndb_join_pushdown=false; explain extended select * from t1 join t1 as t2 on t2.a = t1.c join t1 as t3 on t3.a = t2.c and t3.b = t2.d where t1.a = 1 and t1.b = 1; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 const PRIMARY PRIMARY 8 const,const 1 100.00 1 SIMPLE t2 ref PRIMARY PRIMARY 4 const 3 100.00 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t2.c,test.t2.d 1 100.00 Warnings: Note 1003 /* select#1 */ select '1' AS `a`,'1' AS `b`,'1' AS `c`,'1' AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`a` = '1') and (`test`.`t3`.`b` = `test`.`t2`.`d`) and (`test`.`t3`.`a` = `test`.`t2`.`c`)) select * from t1 join t1 as t2 on t2.a = t1.c join t1 as t3 on t3.a = t2.c and t3.b = t2.d where t1.a = 1 and t1.b = 1; a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 2 1 2 5 1 1 1 1 1 1 4 2 3 2 3 4 5 explain extended select * from t1 left join t1 as t2 on t2.a = t1.c left join t1 as t3 on t3.a = t2.c and t3.b = t2.d where t1.a = 1 and t1.b = 1; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 const PRIMARY PRIMARY 8 const,const 1 100.00 1 SIMPLE t2 ref PRIMARY PRIMARY 4 const 3 100.00 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t2.c,test.t2.d 1 100.00 Warnings: Note 1003 /* select#1 */ select '1' AS `a`,'1' AS `b`,'1' AS `c`,'1' AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` left join `test`.`t1` `t2` on((`test`.`t2`.`a` = '1')) left join `test`.`t1` `t3` on(((`test`.`t3`.`b` = `test`.`t2`.`d`) and (`test`.`t3`.`a` = `test`.`t2`.`c`))) where 1 select * from t1 left join t1 as t2 on t2.a = t1.c left join t1 as t3 on t3.a = t2.c and t3.b = t2.d where t1.a = 1 and t1.b = 1; a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 5 1 NULL NULL NULL NULL 1 1 1 1 1 3 1 2 1 2 5 1 1 1 1 1 1 4 2 3 2 3 4 5 set ndb_join_pushdown=true; explain extended select * from t1 as t2 join t1 as t3 on t3.a = t2.c and t3.b = t2.d where t2.a = 1; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t2 ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t2.c,test.t2.d 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t3`.`b` = `test`.`t2`.`d`) and (`test`.`t3`.`a` = `test`.`t2`.`c`) and (`test`.`t2`.`a` = 1)) select * from t1 as t2 join t1 as t3 on t3.a = t2.c and t3.b = t2.d where t2.a = 1; a b c d a b c d 1 1 1 1 1 1 1 1 1 3 1 2 1 2 5 1 1 4 2 3 2 3 4 5 set ndb_join_pushdown=true; explain extended select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t2.c and t3.b = t1.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t2.c,test.t1.c 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t3`.`b` = `test`.`t1`.`c`) and (`test`.`t3`.`a` = `test`.`t2`.`c`)) select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t2.c and t3.b = t1.c; a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 2 1 3 1 2 1 1 1 1 1 4 2 3 1 4 2 3 2 2 2 2 2 1 3 4 2 1 3 4 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 3 4 5 2 3 4 5 4 4 4 4 3 1 1 2 3 1 1 2 1 1 1 1 3 2 2 3 3 2 2 3 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 3 4 3 4 3 3 3 3 4 1 4 5 4 1 4 5 4 4 4 4 4 3 1 2 4 3 1 2 1 1 1 1 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t1.d join t1 as t4 on t4.a = t3.c and t4.b = t2.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 4 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Child of 't2' in pushed join@1 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 8 test.t3.c,test.t2.c 1 100.00 Child of 't3' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` join `test`.`t1` `t4` where ((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t3`.`b` = `test`.`t1`.`d`) and (`test`.`t3`.`a` = `test`.`t1`.`c`) and (`test`.`t4`.`b` = `test`.`t2`.`c`) and (`test`.`t4`.`a` = `test`.`t3`.`c`)) select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t1.d join t1 as t4 on t4.a = t3.c and t4.b = t2.c; a b c d a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 2 3 1 4 2 3 2 3 4 5 4 2 5 1 2 1 3 4 2 1 3 4 3 4 3 4 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 3 3 2 2 3 2 3 4 5 4 2 5 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 3 4 3 4 3 4 3 4 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t2.d join t1 as t4 on t4.a = t3.c and t4.b = t2.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 4 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t2.d 1 100.00 Child of 't2' in pushed join@1 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 8 test.t3.c,test.t2.c 1 100.00 Child of 't3' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` join `test`.`t1` `t4` where ((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t3`.`b` = `test`.`t2`.`d`) and (`test`.`t3`.`a` = `test`.`t1`.`c`) and (`test`.`t4`.`b` = `test`.`t2`.`c`) and (`test`.`t4`.`a` = `test`.`t3`.`c`)) select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t2.d join t1 as t4 on t4.a = t3.c and t4.b = t2.c; a b c d a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 2 3 1 4 2 3 2 3 4 5 4 2 5 1 2 1 3 4 2 1 3 4 3 4 3 4 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 3 3 2 2 3 2 3 4 5 4 2 5 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 3 4 3 4 3 4 3 4 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t2.d join t1 as t4 on t4.a = t3.c and t4.b = t1.d; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 4 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t2.d 1 100.00 Child of 't2' in pushed join@1 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 8 test.t3.c,test.t1.d 1 100.00 Child of 't3' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` join `test`.`t1` `t4` where ((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t3`.`b` = `test`.`t2`.`d`) and (`test`.`t3`.`a` = `test`.`t1`.`c`) and (`test`.`t4`.`b` = `test`.`t1`.`d`) and (`test`.`t4`.`a` = `test`.`t3`.`c`)) select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t2.d join t1 as t4 on t4.a = t3.c and t4.b = t1.d; a b c d a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 2 3 1 4 2 3 2 3 4 5 4 3 1 2 2 1 3 4 2 1 3 4 3 4 3 4 3 4 3 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 3 3 2 2 3 2 3 4 5 4 3 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t1.d join t1 as t4 on t4.a = t3.a and t4.b = t2.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 4 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t2.c 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` join `test`.`t1` `t4` where ((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t3`.`b` = `test`.`t1`.`d`) and (`test`.`t4`.`b` = `test`.`t2`.`c`) and (`test`.`t3`.`a` = `test`.`t1`.`c`) and (`test`.`t4`.`a` = `test`.`t1`.`c`)) select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t1.d join t1 as t4 on t4.a = t3.a and t4.b = t2.c; a b c d a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 2 1 3 1 2 1 2 5 1 1 1 1 1 1 4 2 3 1 4 2 3 2 3 4 5 2 2 2 2 2 1 3 4 2 1 3 4 3 4 3 4 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 1 1 2 3 1 1 2 1 2 5 1 1 1 1 1 3 2 2 3 3 2 2 3 2 3 4 5 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 3 4 3 4 3 4 3 4 3 3 3 3 4 3 1 2 4 3 1 2 1 2 5 1 1 1 1 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t1.d join t1 as t4 on t4.a = t3.b and t4.b = t2.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 4 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 8 test.t1.d,test.t2.c 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` join `test`.`t1` `t4` where ((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t3`.`a` = `test`.`t1`.`c`) and (`test`.`t4`.`b` = `test`.`t2`.`c`) and (`test`.`t3`.`b` = `test`.`t1`.`d`) and (`test`.`t4`.`a` = `test`.`t1`.`d`)) select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t1.d join t1 as t4 on t4.a = t3.b and t4.b = t2.c; a b c d a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 2 1 3 1 2 1 2 5 1 2 1 3 4 1 4 2 3 1 4 2 3 2 3 4 5 3 2 2 3 2 1 3 4 2 1 3 4 3 4 3 4 4 3 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 1 1 2 3 1 1 2 1 2 5 1 2 1 3 4 3 2 2 3 3 2 2 3 2 3 4 5 3 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 3 4 3 4 3 4 3 4 4 3 1 2 4 3 1 2 4 3 1 2 1 2 5 1 2 1 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t1.d join t1 as t4 on t4.a = t3.c and t4.b = t2.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 4 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 8 test.t3.c,test.t1.a 1 100.00 Child of 't3' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` join `test`.`t1` `t4` where ((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t3`.`b` = `test`.`t1`.`d`) and (`test`.`t3`.`a` = `test`.`t1`.`c`) and (`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t4`.`b` = `test`.`t1`.`a`) and (`test`.`t4`.`a` = `test`.`t3`.`c`)) select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t1.d join t1 as t4 on t4.a = t3.c and t4.b = t2.a; a b c d a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 2 3 1 4 2 3 2 3 4 5 4 1 4 5 2 1 3 4 2 1 3 4 3 4 3 4 3 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 3 3 2 2 3 2 3 4 5 4 3 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 3 4 3 4 3 4 3 4 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t1.d join t1 as t4 on t4.a = t3.c and t4.b = t2.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 4 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 8 test.t3.c,test.t1.b 1 100.00 Child of 't3' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` join `test`.`t1` `t4` where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t3`.`b` = `test`.`t1`.`d`) and (`test`.`t3`.`a` = `test`.`t1`.`c`) and (`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t4`.`b` = `test`.`t1`.`b`) and (`test`.`t4`.`a` = `test`.`t3`.`c`)) select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t1.d join t1 as t4 on t4.a = t3.c and t4.b = t2.b; a b c d a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 2 3 1 4 2 3 2 3 4 5 4 4 4 4 2 1 3 4 2 1 3 4 3 4 3 4 3 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 3 3 2 2 3 2 3 4 5 4 2 5 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t1.d join t1 as t4 on t4.a = t1.c and t4.b = t2.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 4 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 8 test.t3.a,test.t2.c 1 100.00 Child of 't2' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` join `test`.`t1` `t4` where ((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t3`.`b` = `test`.`t1`.`d`) and (`test`.`t4`.`b` = `test`.`t2`.`c`) and (`test`.`t3`.`a` = `test`.`t1`.`c`) and (`test`.`t4`.`a` = `test`.`t1`.`c`)) select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t1.d join t1 as t4 on t4.a = t1.c and t4.b = t2.c; a b c d a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 2 1 3 1 2 1 2 5 1 1 1 1 1 1 4 2 3 1 4 2 3 2 3 4 5 2 2 2 2 2 1 3 4 2 1 3 4 3 4 3 4 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 1 1 2 3 1 1 2 1 2 5 1 1 1 1 1 3 2 2 3 3 2 2 3 2 3 4 5 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 3 4 3 4 3 4 3 4 3 3 3 3 4 3 1 2 4 3 1 2 1 2 5 1 1 1 1 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t1.d join t1 as t4 on t4.a = t3.c and t4.b = t1.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 4 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 8 test.t3.c,test.t2.b 1 100.00 Child of 't3' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` join `test`.`t1` `t4` where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t3`.`b` = `test`.`t1`.`d`) and (`test`.`t3`.`a` = `test`.`t1`.`c`) and (`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t4`.`b` = `test`.`t1`.`b`) and (`test`.`t4`.`a` = `test`.`t3`.`c`)) select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t1.d join t1 as t4 on t4.a = t3.c and t4.b = t1.b; a b c d a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 2 3 1 4 2 3 2 3 4 5 4 4 4 4 2 1 3 4 2 1 3 4 3 4 3 4 3 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 3 3 2 2 3 2 3 4 5 4 2 5 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t2x on t2x.a = t2.c and t2x.b = t2.d join t1 as t3x on t3x.a = t1.c and t3x.b = t1.d join t1 as t4 on t4.a = t3x.c and t4.b = t2x.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 5 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t2x eq_ref PRIMARY PRIMARY 8 test.t2.c,test.t2.d 1 100.00 Child of 't2' in pushed join@1 1 SIMPLE t3x eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Child of 't2x' in pushed join@1 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 8 test.t3x.c,test.t2x.c 1 100.00 Child of 't3x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t2x`.`a` AS `a`,`test`.`t2x`.`b` AS `b`,`test`.`t2x`.`c` AS `c`,`test`.`t2x`.`d` AS `d`,`test`.`t3x`.`a` AS `a`,`test`.`t3x`.`b` AS `b`,`test`.`t3x`.`c` AS `c`,`test`.`t3x`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t2x` join `test`.`t1` `t3x` join `test`.`t1` `t4` where ((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t2x`.`b` = `test`.`t2`.`d`) and (`test`.`t2x`.`a` = `test`.`t2`.`c`) and (`test`.`t3x`.`b` = `test`.`t1`.`d`) and (`test`.`t3x`.`a` = `test`.`t1`.`c`) and (`test`.`t4`.`b` = `test`.`t2x`.`c`) and (`test`.`t4`.`a` = `test`.`t3x`.`c`)) explain extended select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t2x on t2x.a = t2.c and t2x.b = t2.d join t1 as t3 on t3.a = t1.c and t3.b = t1.d join t1 as t3x on t3x.a = t3.c and t3x.b = t3.d join t1 as t4 on t4.a = t3x.c and t4.b = t2x.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 6 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t2x eq_ref PRIMARY PRIMARY 8 test.t2.c,test.t2.d 1 100.00 Child of 't2' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Child of 't2x' in pushed join@1 1 SIMPLE t3x eq_ref PRIMARY PRIMARY 8 test.t3.c,test.t3.d 1 100.00 Child of 't3' in pushed join@1 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 8 test.t3x.c,test.t2x.c 1 100.00 Child of 't3x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t2x`.`a` AS `a`,`test`.`t2x`.`b` AS `b`,`test`.`t2x`.`c` AS `c`,`test`.`t2x`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t3x`.`a` AS `a`,`test`.`t3x`.`b` AS `b`,`test`.`t3x`.`c` AS `c`,`test`.`t3x`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t2x` join `test`.`t1` `t3` join `test`.`t1` `t3x` join `test`.`t1` `t4` where ((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t2x`.`b` = `test`.`t2`.`d`) and (`test`.`t2x`.`a` = `test`.`t2`.`c`) and (`test`.`t3`.`b` = `test`.`t1`.`d`) and (`test`.`t3`.`a` = `test`.`t1`.`c`) and (`test`.`t3x`.`b` = `test`.`t3`.`d`) and (`test`.`t3x`.`a` = `test`.`t3`.`c`) and (`test`.`t4`.`b` = `test`.`t2x`.`c`) and (`test`.`t4`.`a` = `test`.`t3x`.`c`)) explain extended select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t1.d join t1 as t2x on t2x.a = t2.c and t2x.b = t2.d join t1 as t3x on t3x.a = t3.c and t3x.b = t3.d join t1 as t4 on t4.a = t3x.c and t4.b = t2x.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 6 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Child of 't2' in pushed join@1 1 SIMPLE t2x eq_ref PRIMARY PRIMARY 8 test.t2.c,test.t2.d 1 100.00 Child of 't3' in pushed join@1 1 SIMPLE t3x eq_ref PRIMARY PRIMARY 8 test.t3.c,test.t3.d 1 100.00 Child of 't2x' in pushed join@1 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 8 test.t3x.c,test.t2x.c 1 100.00 Child of 't3x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t2x`.`a` AS `a`,`test`.`t2x`.`b` AS `b`,`test`.`t2x`.`c` AS `c`,`test`.`t2x`.`d` AS `d`,`test`.`t3x`.`a` AS `a`,`test`.`t3x`.`b` AS `b`,`test`.`t3x`.`c` AS `c`,`test`.`t3x`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` join `test`.`t1` `t2x` join `test`.`t1` `t3x` join `test`.`t1` `t4` where ((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t3`.`b` = `test`.`t1`.`d`) and (`test`.`t3`.`a` = `test`.`t1`.`c`) and (`test`.`t2x`.`b` = `test`.`t2`.`d`) and (`test`.`t2x`.`a` = `test`.`t2`.`c`) and (`test`.`t3x`.`b` = `test`.`t3`.`d`) and (`test`.`t3x`.`a` = `test`.`t3`.`c`) and (`test`.`t4`.`b` = `test`.`t2x`.`c`) and (`test`.`t4`.`a` = `test`.`t3x`.`c`)) explain extended select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t2x on t2x.a = t2.c and t2x.b = t2.d join t1 as t3 on t3.a = t1.c and t3.b = t1.d join t1 as t3x on t3x.a = t1.c and t3x.b = t1.d join t1 as t4 on t4.a = t3x.c and t4.b = t2x.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 6 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t2x eq_ref PRIMARY PRIMARY 8 test.t2.c,test.t2.d 1 100.00 Child of 't2' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3x eq_ref PRIMARY PRIMARY 8 test.t3.a,test.t3.b 1 100.00 Child of 't2x' in pushed join@1; Using where 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 8 test.t3x.c,test.t2x.c 1 100.00 Child of 't3x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t2x`.`a` AS `a`,`test`.`t2x`.`b` AS `b`,`test`.`t2x`.`c` AS `c`,`test`.`t2x`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t3x`.`a` AS `a`,`test`.`t3x`.`b` AS `b`,`test`.`t3x`.`c` AS `c`,`test`.`t3x`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t2x` join `test`.`t1` `t3` join `test`.`t1` `t3x` join `test`.`t1` `t4` where ((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t2x`.`b` = `test`.`t2`.`d`) and (`test`.`t2x`.`a` = `test`.`t2`.`c`) and (`test`.`t3`.`b` = `test`.`t1`.`d`) and (`test`.`t3x`.`b` = `test`.`t1`.`d`) and (`test`.`t3`.`a` = `test`.`t1`.`c`) and (`test`.`t3x`.`a` = `test`.`t1`.`c`) and (`test`.`t4`.`b` = `test`.`t2x`.`c`) and (`test`.`t4`.`a` = `test`.`t3x`.`c`)) explain extended select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t2x on t2x.a = t2.c and t2x.b = t2.d join t1 as t3 on t3.a = t1.c and t3.b = t1.b join t1 as t3x on t3x.a = t1.c and t3x.b = t1.d join t1 as t4 on t4.a = t3x.c and t4.b = t2x.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 6 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t2x eq_ref PRIMARY PRIMARY 8 test.t2.c,test.t2.d 1 100.00 Child of 't2' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t2.b 1 100.00 Child of 't1' in pushed join@1; Using where 1 SIMPLE t3x eq_ref PRIMARY PRIMARY 8 test.t3.a,test.t1.d 1 100.00 Child of 't2x' in pushed join@1; Using where 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 8 test.t3x.c,test.t2x.c 1 100.00 Child of 't3x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t2x`.`a` AS `a`,`test`.`t2x`.`b` AS `b`,`test`.`t2x`.`c` AS `c`,`test`.`t2x`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t3x`.`a` AS `a`,`test`.`t3x`.`b` AS `b`,`test`.`t3x`.`c` AS `c`,`test`.`t3x`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t2x` join `test`.`t1` `t3` join `test`.`t1` `t3x` join `test`.`t1` `t4` where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t2x`.`b` = `test`.`t2`.`d`) and (`test`.`t2x`.`a` = `test`.`t2`.`c`) and (`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t3`.`b` = `test`.`t1`.`b`) and (`test`.`t3x`.`b` = `test`.`t1`.`d`) and (`test`.`t3`.`a` = `test`.`t1`.`c`) and (`test`.`t3x`.`a` = `test`.`t1`.`c`) and (`test`.`t4`.`b` = `test`.`t2x`.`c`) and (`test`.`t4`.`a` = `test`.`t3x`.`c`)) explain extended select straight_join * from t1 left join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.c and t3.b = t1.d left join t1 as t4 on t4.a = t3.c and t4.b = t2.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 16 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 8 test.t3.c,test.t2.c 1 100.00 Warnings: Note 9999 Can't push table 't4' as child of 't1', dependencies on outer joined grandparents not implemented Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` left join `test`.`t1` `t2` on(((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`))) join `test`.`t1` `t3` left join `test`.`t1` `t4` on(((`test`.`t4`.`b` = `test`.`t2`.`c`) and (`test`.`t4`.`a` = `test`.`t3`.`c`))) where ((`test`.`t3`.`b` = `test`.`t1`.`d`) and (`test`.`t3`.`a` = `test`.`t1`.`c`)) explain extended select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b left join t1 as t3 on t3.a = t1.c and t3.b = t1.d left join t1 as t4 on t4.a = t3.c and t4.b = t2.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 4 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.c,test.t1.d 1 100.00 Child of 't2' in pushed join@1 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 8 test.t3.c,test.t2.c 1 100.00 Child of 't3' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` left join `test`.`t1` `t3` on(((`test`.`t3`.`b` = `test`.`t1`.`d`) and (`test`.`t3`.`a` = `test`.`t1`.`c`))) left join `test`.`t1` `t4` on(((`test`.`t4`.`b` = `test`.`t2`.`c`) and (`test`.`t4`.`a` = `test`.`t3`.`c`))) where ((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`)) explain extended select straight_join * from t1 left join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.a left join t1 as t4 on t4.a = t3.c and t4.b = t2.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 ref PRIMARY PRIMARY 4 test.t1.a 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 8 test.t3.c,test.t2.c 1 100.00 Warnings: Note 9999 Can't push table 't4' as child of 't1', dependencies on outer joined grandparents not implemented Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` left join `test`.`t1` `t2` on(((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`))) join `test`.`t1` `t3` left join `test`.`t1` `t4` on(((`test`.`t4`.`b` = `test`.`t2`.`c`) and (`test`.`t4`.`a` = `test`.`t3`.`c`))) where (`test`.`t3`.`a` = `test`.`t1`.`a`) explain extended select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b left join t1 as t3 on t3.a = t1.a left join t1 as t4 on t4.a = t3.c and t4.b = t2.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 2 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 ref PRIMARY PRIMARY 4 test.t2.a 1 100.00 Parent of 2 pushed join@2; Using where 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 8 test.t3.c,test.t2.c 1 100.00 Child of 't3' in pushed join@2 Warnings: Note 9999 Can't push table 't3' as child of 't1', outer join of scan-child not implemented Note 9999 Can't push table 't4' as child of 't1', column 't3.c' is outside scope of pushable join Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` left join `test`.`t1` `t3` on(((`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t3`.`a` = `test`.`t1`.`a`))) left join `test`.`t1` `t4` on(((`test`.`t4`.`b` = `test`.`t2`.`c`) and (`test`.`t4`.`a` = `test`.`t3`.`c`))) where ((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`)) explain extended select straight_join * from t1 left join t1 as t2 on t2.a = t1.a and t2.b = t1.b join t1 as t3 on t3.a = t1.a left join t1 as t4 on t4.a = t3.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 ref PRIMARY PRIMARY 4 test.t1.a 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t4 ref PRIMARY PRIMARY 4 test.t3.c 1 100.00 Warnings: Note 9999 Can't push table 't4' as child of 't1', outer join of scan-child not implemented Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` left join `test`.`t1` `t2` on(((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`))) join `test`.`t1` `t3` left join `test`.`t1` `t4` on((`test`.`t4`.`a` = `test`.`t3`.`c`)) where (`test`.`t3`.`a` = `test`.`t1`.`a`) explain extended select straight_join * from t1 join t1 as t2 on t2.a = t1.a and t2.b = t1.b left join t1 as t3 on t3.a = t1.a left join t1 as t4 on t4.a = t3.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 2 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.a,test.t1.b 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 ref PRIMARY PRIMARY 4 test.t2.a 1 100.00 Using where 1 SIMPLE t4 ref PRIMARY PRIMARY 4 test.t3.c 1 100.00 Warnings: Note 9999 Can't push table 't3' as child of 't1', outer join of scan-child not implemented Note 9999 Can't push table 't4' as child of 't1', column 't3.c' is outside scope of pushable join Note 9999 Can't push table 't4' as child of 't3', outer join of scan-child not implemented Note 1003 /* select#1 */ select straight_join `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` left join `test`.`t1` `t3` on(((`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t3`.`a` = `test`.`t1`.`a`))) left join `test`.`t1` `t4` on((`test`.`t4`.`a` = `test`.`t3`.`c`)) where ((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`)) set ndb_join_pushdown=true; explain extended select * from t1 x, t1 y, t1 z, t1 where y.a=x.d and y.b=x.b and z.a=y.d and t1.a = z.d and t1.b=z.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL NULL NULL NULL NULL 16 100.00 Parent of 4 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 test.x.d,test.x.b 1 100.00 Child of 'x' in pushed join@1 1 SIMPLE z ref PRIMARY PRIMARY 4 test.y.d 1 100.00 Child of 'y' in pushed join@1 1 SIMPLE t1 eq_ref PRIMARY PRIMARY 8 test.z.d,test.z.b 1 100.00 Child of 'z' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a` AS `a`,`test`.`x`.`b` AS `b`,`test`.`x`.`c` AS `c`,`test`.`x`.`d` AS `d`,`test`.`y`.`a` AS `a`,`test`.`y`.`b` AS `b`,`test`.`y`.`c` AS `c`,`test`.`y`.`d` AS `d`,`test`.`z`.`a` AS `a`,`test`.`z`.`b` AS `b`,`test`.`z`.`c` AS `c`,`test`.`z`.`d` AS `d`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` `x` join `test`.`t1` `y` join `test`.`t1` `z` join `test`.`t1` where ((`test`.`t1`.`b` = `test`.`z`.`b`) and (`test`.`t1`.`a` = `test`.`z`.`d`) and (`test`.`z`.`a` = `test`.`y`.`d`) and (`test`.`y`.`b` = `test`.`x`.`b`) and (`test`.`y`.`a` = `test`.`x`.`d`)) select * from t1 x, t1 y, t1 z, t1 where y.a=x.d and y.b=x.b and z.a=y.d and t1.a = z.d and t1.b=z.b; a b c d a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 5 1 1 2 5 1 1 1 1 1 1 1 1 1 1 3 1 2 2 3 4 5 1 1 1 1 1 1 1 1 1 4 2 3 3 4 3 4 1 2 5 1 1 2 5 1 1 1 1 1 1 1 1 1 1 2 5 1 1 2 5 1 1 2 5 1 1 2 5 1 1 2 5 1 1 2 5 1 1 3 1 2 2 3 4 5 1 2 5 1 1 2 5 1 1 4 2 3 3 4 3 4 1 4 2 3 3 4 3 4 4 2 5 1 1 2 5 1 1 4 2 3 3 4 3 4 4 3 1 2 2 3 4 5 1 4 2 3 3 4 3 4 4 4 4 4 4 4 4 4 2 2 2 2 2 2 2 2 2 1 3 4 4 1 4 5 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 4 5 1 1 4 2 3 2 4 5 1 1 4 2 3 3 1 1 2 2 1 3 4 2 4 5 1 1 4 2 3 3 2 2 3 3 2 2 3 2 4 5 1 1 4 2 3 3 3 3 3 3 3 3 3 2 4 5 1 1 4 2 3 3 4 3 4 4 4 4 4 3 1 1 2 2 1 3 4 4 2 5 1 1 2 5 1 3 1 1 2 2 1 3 4 4 3 1 2 2 3 4 5 3 1 1 2 2 1 3 4 4 4 4 4 4 4 4 4 3 2 2 3 3 2 2 3 3 1 1 2 2 1 3 4 3 2 2 3 3 2 2 3 3 2 2 3 3 2 2 3 3 2 2 3 3 2 2 3 3 3 3 3 3 3 3 3 3 2 2 3 3 2 2 3 3 4 3 4 4 4 4 4 3 3 3 3 3 3 3 3 3 1 1 2 2 1 3 4 3 3 3 3 3 3 3 3 3 2 2 3 3 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 4 4 4 4 3 4 3 4 4 4 4 4 4 2 5 1 1 2 5 1 3 4 3 4 4 4 4 4 4 3 1 2 2 3 4 5 3 4 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 2 5 1 1 2 5 1 1 1 1 1 1 1 1 1 4 2 5 1 1 2 5 1 1 2 5 1 1 2 5 1 4 2 5 1 1 2 5 1 1 3 1 2 2 3 4 5 4 2 5 1 1 2 5 1 1 4 2 3 3 4 3 4 4 4 4 4 4 4 4 4 4 2 5 1 1 2 5 1 4 4 4 4 4 4 4 4 4 3 1 2 2 3 4 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select * from t1 x, t1 y where x.a <= 2 and y.a=x.d and y.b=x.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x range PRIMARY PRIMARY 4 NULL 3 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x`.`a` <= 2) 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 test.x.d,test.x.b 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a` AS `a`,`test`.`x`.`b` AS `b`,`test`.`x`.`c` AS `c`,`test`.`x`.`d` AS `d`,`test`.`y`.`a` AS `a`,`test`.`y`.`b` AS `b`,`test`.`y`.`c` AS `c`,`test`.`y`.`d` AS `d` from `test`.`t1` `x` join `test`.`t1` `y` where ((`test`.`y`.`b` = `test`.`x`.`b`) and (`test`.`y`.`a` = `test`.`x`.`d`) and (`test`.`x`.`a` <= 2)) select * from t1 x, t1 y where x.a <= 2 and y.a=x.d and y.b=x.b; a b c d a b c d 1 1 1 1 1 1 1 1 1 2 5 1 1 2 5 1 1 3 1 2 2 3 4 5 1 4 2 3 3 4 3 4 2 1 3 4 4 1 4 5 2 2 2 2 2 2 2 2 2 4 5 1 1 4 2 3 explain extended select * from t1 x, t1 y where (x.a <= 2 or x.a > 3) and y.a=x.d and y.b=x.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x range PRIMARY PRIMARY 4 NULL 6 100.00 Parent of 2 pushed join@1; Using where with pushed condition: ((`test`.`x`.`a` <= 2) or (`test`.`x`.`a` > 3)) 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 test.x.d,test.x.b 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a` AS `a`,`test`.`x`.`b` AS `b`,`test`.`x`.`c` AS `c`,`test`.`x`.`d` AS `d`,`test`.`y`.`a` AS `a`,`test`.`y`.`b` AS `b`,`test`.`y`.`c` AS `c`,`test`.`y`.`d` AS `d` from `test`.`t1` `x` join `test`.`t1` `y` where ((`test`.`y`.`b` = `test`.`x`.`b`) and (`test`.`y`.`a` = `test`.`x`.`d`) and ((`test`.`x`.`a` <= 2) or (`test`.`x`.`a` > 3))) select * from t1 x, t1 y where (x.a <= 2 or x.a > 3) and y.a=x.d and y.b=x.b; a b c d a b c d 1 1 1 1 1 1 1 1 1 2 5 1 1 2 5 1 1 3 1 2 2 3 4 5 1 4 2 3 3 4 3 4 2 1 3 4 4 1 4 5 2 2 2 2 2 2 2 2 2 4 5 1 1 4 2 3 4 2 5 1 1 2 5 1 4 3 1 2 2 3 4 5 4 4 4 4 4 4 4 4 explain extended select * from t1 x, t1 y where (x.a >= 2 or x.a < 3) and y.a=x.d and y.b=x.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x range PRIMARY PRIMARY 0 NULL 16 100.00 Parent of 2 pushed join@1; Using where with pushed condition: ((`test`.`x`.`a` >= 2) or (`test`.`x`.`a` < 3)) 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 test.x.d,test.x.b 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a` AS `a`,`test`.`x`.`b` AS `b`,`test`.`x`.`c` AS `c`,`test`.`x`.`d` AS `d`,`test`.`y`.`a` AS `a`,`test`.`y`.`b` AS `b`,`test`.`y`.`c` AS `c`,`test`.`y`.`d` AS `d` from `test`.`t1` `x` join `test`.`t1` `y` where ((`test`.`y`.`b` = `test`.`x`.`b`) and (`test`.`y`.`a` = `test`.`x`.`d`) and ((`test`.`x`.`a` >= 2) or (`test`.`x`.`a` < 3))) select * from t1 x, t1 y where (x.a >= 2 or x.a < 3) and y.a=x.d and y.b=x.b; a b c d a b c d 1 1 1 1 1 1 1 1 1 2 5 1 1 2 5 1 1 3 1 2 2 3 4 5 1 4 2 3 3 4 3 4 2 1 3 4 4 1 4 5 2 2 2 2 2 2 2 2 2 4 5 1 1 4 2 3 3 1 1 2 2 1 3 4 3 2 2 3 3 2 2 3 3 3 3 3 3 3 3 3 3 4 3 4 4 4 4 4 4 2 5 1 1 2 5 1 4 3 1 2 2 3 4 5 4 4 4 4 4 4 4 4 explain extended select * from t1 x, t1 y where (x.a <= 2 or x.a in (0,5,4)) and y.a=x.d and y.b=x.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x range PRIMARY PRIMARY 4 NULL 9 100.00 Parent of 2 pushed join@1; Using where with pushed condition: ((`test`.`x`.`a` <= 2) or (`test`.`x`.`a` in (0,5,4))) 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 test.x.d,test.x.b 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a` AS `a`,`test`.`x`.`b` AS `b`,`test`.`x`.`c` AS `c`,`test`.`x`.`d` AS `d`,`test`.`y`.`a` AS `a`,`test`.`y`.`b` AS `b`,`test`.`y`.`c` AS `c`,`test`.`y`.`d` AS `d` from `test`.`t1` `x` join `test`.`t1` `y` where ((`test`.`y`.`b` = `test`.`x`.`b`) and (`test`.`y`.`a` = `test`.`x`.`d`) and ((`test`.`x`.`a` <= 2) or (`test`.`x`.`a` in (0,5,4)))) select * from t1 x, t1 y where (x.a <= 2 or x.a in (0,5,4)) and y.a=x.d and y.b=x.b; a b c d a b c d 1 1 1 1 1 1 1 1 1 2 5 1 1 2 5 1 1 3 1 2 2 3 4 5 1 4 2 3 3 4 3 4 2 1 3 4 4 1 4 5 2 2 2 2 2 2 2 2 2 4 5 1 1 4 2 3 4 2 5 1 1 2 5 1 4 3 1 2 2 3 4 5 4 4 4 4 4 4 4 4 explain extended select * from t1 x, t1 y where (x.a <= 2 or (x.a,x.b) in ((0,0),(5,0),(4,3))) and y.a=x.d and y.b=x.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL PRIMARY NULL NULL NULL 16 100.00 Parent of 2 pushed join@1; Using where 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 test.x.d,test.x.b 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a` AS `a`,`test`.`x`.`b` AS `b`,`test`.`x`.`c` AS `c`,`test`.`x`.`d` AS `d`,`test`.`y`.`a` AS `a`,`test`.`y`.`b` AS `b`,`test`.`y`.`c` AS `c`,`test`.`y`.`d` AS `d` from `test`.`t1` `x` join `test`.`t1` `y` where ((`test`.`y`.`b` = `test`.`x`.`b`) and (`test`.`y`.`a` = `test`.`x`.`d`) and ((`test`.`x`.`a` <= 2) or ((`test`.`x`.`a`,`test`.`x`.`b`) in (<cache>((0,0)),<cache>((5,0)),<cache>((4,3)))))) select * from t1 x, t1 y where (x.a <= 2 or (x.a,x.b) in ((0,0),(5,0),(4,3))) and y.a=x.d and y.b=x.b; a b c d a b c d 1 1 1 1 1 1 1 1 1 2 5 1 1 2 5 1 1 3 1 2 2 3 4 5 1 4 2 3 3 4 3 4 2 1 3 4 4 1 4 5 2 2 2 2 2 2 2 2 2 4 5 1 1 4 2 3 4 3 1 2 2 3 4 5 explain extended select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b order by t1.c,t1.d, t1.a, t1.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 16 100.00 Parent of 3 pushed join@1; Using temporary; Using filesort 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t1.c 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t2.b 1 100.00 Child of 't1' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t3`.`b` = `test`.`t1`.`c`) and (`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t3`.`a` = `test`.`t1`.`b`)) order by `test`.`t1`.`c`,`test`.`t1`.`d`,`test`.`t1`.`a`,`test`.`t1`.`b` select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b order by t1.c,t1.d, t1.a, t1.b; a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 2 3 1 1 2 3 1 1 2 3 1 1 2 1 1 1 1 1 1 1 1 4 3 1 2 3 1 1 2 3 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 4 2 3 4 2 5 1 4 2 5 1 3 2 2 3 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 2 1 3 4 1 3 1 2 1 3 1 2 3 4 3 4 4 3 1 2 4 3 1 2 4 4 4 4 4 4 4 4 4 4 4 4 2 3 4 5 3 4 3 4 3 4 3 4 4 1 4 5 1 4 2 3 1 4 2 3 explain extended select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b order by t1.c,t2.d, t1.a, t1.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 16 100.00 Parent of 3 pushed join@1; Using temporary; Using filesort 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t1.c 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t2.b 1 100.00 Child of 't1' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t3`.`b` = `test`.`t1`.`c`) and (`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t3`.`a` = `test`.`t1`.`b`)) order by `test`.`t1`.`c`,`test`.`t2`.`d`,`test`.`t1`.`a`,`test`.`t1`.`b` select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b order by t1.c,t2.d, t1.a, t1.b; a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 3 1 1 2 1 1 1 1 1 1 1 1 1 3 1 2 3 1 1 2 3 1 1 2 4 3 1 2 3 1 1 2 3 1 1 2 1 4 2 3 4 2 5 1 4 2 5 1 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 3 2 2 2 2 2 2 2 2 2 1 3 4 1 3 1 2 1 3 1 2 3 4 3 4 4 3 1 2 4 3 1 2 3 3 3 3 3 3 3 3 3 3 3 3 4 1 4 5 1 4 2 3 1 4 2 3 2 3 4 5 3 4 3 4 3 4 3 4 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b order by t1.a,t1.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 index NULL PRIMARY 8 NULL 16 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t1.c 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t2.b 1 100.00 Child of 't1' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t3`.`b` = `test`.`t1`.`c`) and (`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t3`.`a` = `test`.`t1`.`b`)) order by `test`.`t1`.`a`,`test`.`t1`.`b` select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b order by t1.a,t1.b; a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 2 3 1 1 2 3 1 1 2 1 4 2 3 4 2 5 1 4 2 5 1 2 1 3 4 1 3 1 2 1 3 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 4 5 3 4 3 4 3 4 3 4 3 1 1 2 1 1 1 1 1 1 1 1 3 2 2 3 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 4 3 1 2 4 3 1 2 4 1 4 5 1 4 2 3 1 4 2 3 4 3 1 2 3 1 1 2 3 1 1 2 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b order by t1.a,t2.b, t1.a, t1.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 16 100.00 Parent of 3 pushed join@1; Using temporary; Using filesort 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t1.c 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t2.b 1 100.00 Child of 't1' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t3`.`b` = `test`.`t1`.`c`) and (`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t3`.`a` = `test`.`t1`.`b`)) order by `test`.`t1`.`a`,`test`.`t2`.`b`,`test`.`t1`.`a`,`test`.`t1`.`b` select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b order by t1.a,t2.b, t1.a, t1.b; a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 2 3 1 1 2 3 1 1 2 1 4 2 3 4 2 5 1 4 2 5 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 3 4 1 3 1 2 1 3 1 2 2 3 4 5 3 4 3 4 3 4 3 4 3 1 1 2 1 1 1 1 1 1 1 1 3 2 2 3 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 4 3 1 2 4 3 1 2 4 3 1 2 3 1 1 2 3 1 1 2 4 1 4 5 1 4 2 3 1 4 2 3 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b order by t1.a desc,t1.b desc; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 index NULL PRIMARY 8 NULL 16 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t1.c 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t2.b 1 100.00 Child of 't1' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t3`.`b` = `test`.`t1`.`c`) and (`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t3`.`a` = `test`.`t1`.`b`)) order by `test`.`t1`.`a` desc,`test`.`t1`.`b` desc select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b order by t1.a desc,t1.b desc; a b c d a b c d a b c d 4 4 4 4 4 4 4 4 4 4 4 4 4 3 1 2 3 1 1 2 3 1 1 2 4 1 4 5 1 4 2 3 1 4 2 3 3 4 3 4 4 3 1 2 4 3 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 3 2 2 2 2 2 2 2 2 3 1 1 2 1 1 1 1 1 1 1 1 2 3 4 5 3 4 3 4 3 4 3 4 2 2 2 2 2 2 2 2 2 2 2 2 2 1 3 4 1 3 1 2 1 3 1 2 1 4 2 3 4 2 5 1 4 2 5 1 1 3 1 2 3 1 1 2 3 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 explain extended select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b order by t1.b,t1.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 16 100.00 Parent of 3 pushed join@1; Using temporary; Using filesort 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t1.c 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t2.b 1 100.00 Child of 't1' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t3`.`b` = `test`.`t1`.`c`) and (`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t3`.`a` = `test`.`t1`.`b`)) order by `test`.`t1`.`b`,`test`.`t1`.`a` select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b order by t1.b,t1.a; a b c d a b c d a b c d 1 1 1 1 1 1 1 1 1 1 1 1 2 1 3 4 1 3 1 2 1 3 1 2 3 1 1 2 1 1 1 1 1 1 1 1 4 1 4 5 1 4 2 3 1 4 2 3 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 3 2 2 2 2 2 2 2 2 1 3 1 2 3 1 1 2 3 1 1 2 2 3 4 5 3 4 3 4 3 4 3 4 3 3 3 3 3 3 3 3 3 3 3 3 4 3 1 2 3 1 1 2 3 1 1 2 1 4 2 3 4 2 5 1 4 2 5 1 3 4 3 4 4 3 1 2 4 3 1 2 4 4 4 4 4 4 4 4 4 4 4 4 explain extended select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b order by t1.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 index NULL PRIMARY 8 NULL 16 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t1.c 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t2.b 1 100.00 Child of 't1' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t3`.`b` = `test`.`t1`.`c`) and (`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t3`.`a` = `test`.`t1`.`b`)) order by `test`.`t1`.`a` explain extended select * from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b order by t1.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 16 100.00 Parent of 3 pushed join@1; Using temporary; Using filesort 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t1.c 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t2.b 1 100.00 Child of 't1' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t3`.`b` = `test`.`t1`.`c`) and (`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t3`.`a` = `test`.`t1`.`b`)) order by `test`.`t1`.`b` explain extended select t1.a, t1.b, count(*) from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b group by t1.a, t1.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 index NULL PRIMARY 8 NULL 16 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t1.c 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t2.b 1 100.00 Child of 't1' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,count(0) AS `count(*)` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t3`.`b` = `test`.`t1`.`c`) and (`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t3`.`a` = `test`.`t1`.`b`)) group by `test`.`t1`.`a`,`test`.`t1`.`b` select t1.a, t1.b, count(*) from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b group by t1.a, t1.b; a b count(*) 1 1 1 1 3 1 1 4 1 2 1 1 2 2 1 2 3 1 3 1 1 3 2 1 3 3 1 3 4 1 4 1 1 4 3 1 4 4 1 explain extended select t1.a, count(*) from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b group by t1.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 index NULL PRIMARY 8 NULL 16 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t1.c 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t2.b 1 100.00 Child of 't1' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,count(0) AS `count(*)` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t3`.`b` = `test`.`t1`.`c`) and (`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t3`.`a` = `test`.`t1`.`b`)) group by `test`.`t1`.`a` select t1.a, count(*) from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b group by t1.a; a count(*) 1 3 2 3 3 4 4 3 explain extended select t1.b, count(*) from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b group by t1.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 16 100.00 Parent of 3 pushed join@1; Using temporary; Using filesort 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t1.c 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 8 test.t1.b,test.t2.b 1 100.00 Child of 't1' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`b` AS `b`,count(0) AS `count(*)` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t3`.`b` = `test`.`t1`.`c`) and (`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t3`.`a` = `test`.`t1`.`b`)) group by `test`.`t1`.`b` select t1.b, count(*) from t1 join t1 as t2 on t2.a = t1.b and t2.b = t1.c join t1 as t3 on t3.a = t2.a and t3.b = t2.b group by t1.b; b count(*) 1 4 2 2 3 4 4 3 explain extended select t2.c, count(distinct t2.a) from t1 join t1 as t2 on t1.a = t2.c and t1.b = t2.d where t2.a = 4 and t2.b=4 group by t2.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t2 const PRIMARY PRIMARY 8 const,const 1 100.00 Using where; Using filesort 1 SIMPLE t1 eq_ref PRIMARY PRIMARY 8 test.t2.c,test.t2.d 1 100.00 Warnings: Note 9999 Table 't2' is not pushable: GROUP BY cannot be done using index on grouped columns. Note 9999 Table 't1' is not pushable: GROUP BY cannot be done using index on grouped columns. Note 1003 /* select#1 */ select `test`.`t2`.`c` AS `c`,count(distinct `test`.`t2`.`a`) AS `count(distinct t2.a)` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t1`.`b` = `test`.`t2`.`d`) and (`test`.`t1`.`a` = `test`.`t2`.`c`) and (`test`.`t2`.`b` = 4) and (`test`.`t2`.`a` = 4)) group by `test`.`t2`.`c` select t2.c, count(distinct t2.a) from t1 join t1 as t2 on t1.a = t2.c and t1.b = t2.d where t2.a = 4 and t2.b=4 group by t2.c; c count(distinct t2.a) 4 1 explain extended select t2.c, count(distinct t2.a) from t1 join t1 as t2 on t1.a = t2.c and t1.b = t2.d where t2.a = 4 group by t2.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t2 ref PRIMARY PRIMARY 4 const 3 100.00 Using where; Using filesort 1 SIMPLE t1 eq_ref PRIMARY PRIMARY 8 test.t2.c,test.t2.d 1 100.00 Warnings: Note 9999 Table 't2' is not pushable: GROUP BY cannot be done using index on grouped columns. Note 9999 Table 't1' is not pushable: GROUP BY cannot be done using index on grouped columns. Note 1003 /* select#1 */ select `test`.`t2`.`c` AS `c`,count(distinct `test`.`t2`.`a`) AS `count(distinct t2.a)` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t1`.`b` = `test`.`t2`.`d`) and (`test`.`t1`.`a` = `test`.`t2`.`c`) and (`test`.`t2`.`a` = 4)) group by `test`.`t2`.`c` select t2.c, count(distinct t2.a) from t1 join t1 as t2 on t1.a = t2.c and t1.b = t2.d where t2.a = 4 group by t2.c; c count(distinct t2.a) 1 1 4 1 explain extended select t2.c, count(distinct t2.a) from t1 join t1 as t2 on t1.a = t2.c and t1.b = t2.d where t2.a = 4 and t2.b=4 group by t2.c order by t2.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t2 const PRIMARY PRIMARY 8 const,const 1 100.00 Using where; Using filesort 1 SIMPLE t1 eq_ref PRIMARY PRIMARY 8 test.t2.c,test.t2.d 1 100.00 Warnings: Note 9999 Table 't2' is not pushable: GROUP BY cannot be done using index on grouped columns. Note 9999 Table 't1' is not pushable: GROUP BY cannot be done using index on grouped columns. Note 1003 /* select#1 */ select `test`.`t2`.`c` AS `c`,count(distinct `test`.`t2`.`a`) AS `count(distinct t2.a)` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t1`.`b` = `test`.`t2`.`d`) and (`test`.`t1`.`a` = `test`.`t2`.`c`) and (`test`.`t2`.`b` = 4) and (`test`.`t2`.`a` = 4)) group by `test`.`t2`.`c` order by `test`.`t2`.`c` select t2.c, count(distinct t2.a) from t1 join t1 as t2 on t1.a = t2.c and t1.b = t2.d where t2.a = 4 and t2.b=4 group by t2.c order by t2.c; c count(distinct t2.a) 4 1 create table tx like t1; insert into tx select x1.a+x2.a*16, x1.b+x2.b*16, x1.c+x2.c*16, x1.d+x2.d*16 from t1 as x1 cross join t1 as x2; explain select count(*) from tx as x1 left join tx as x2 on x1.c=x2.a and x1.d=x2.d; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE x1 ALL NULL NULL NULL NULL 256 1 SIMPLE x2 ref PRIMARY PRIMARY 4 test.x1.c 2 Using where select count(*) from tx as x1 left join tx as x2 on x1.c=x2.a and x1.d=x2.d; count(*) 304 drop table tx; alter table t1 partition by key(a); update spj_save_counts set val = (select sum(val) from ndbinfo.counters where block_name='DBSPJ' and counter_name='SCAN_ROWS_RETURNED') where counter_name='SCAN_ROWS_RETURNED'; explain select count(*) from t1 join t1 as t2 on t2.a = t1.c join t1 as t3 on t3.a = t1.c; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 16 Parent of 3 pushed join@1 1 SIMPLE t2 ref PRIMARY PRIMARY 4 test.t1.c 1 Child of 't1' in pushed join@1 1 SIMPLE t3 ref PRIMARY PRIMARY 4 test.t1.c 1 Child of 't1' in pushed join@1 select count(*) from t1 join t1 as t2 on t2.a = t1.c join t1 as t3 on t3.a = t1.c; count(*) 208 CREATE TABLE tx ( a int NOT NULL, PRIMARY KEY (`a`) ); delete from t1; insert into tx values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9); insert into t1 select 1, x1.a * 10+x2.a, 1, 0 from tx as x1 cross join tx as x2; explain select count(*) from t1 as x1 join t1 as x2 on x2.a = x1.c and x1.b < 2 join t1 as x3 on x3.a = x1.c; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE x1 ALL NULL NULL NULL NULL 100 Parent of 3 pushed join@1; Using where with pushed condition 1 SIMPLE x2 ref PRIMARY PRIMARY 4 test.x1.c 1 Child of 'x1' in pushed join@1 1 SIMPLE x3 ref PRIMARY PRIMARY 4 test.x1.c 1 Child of 'x1' in pushed join@1 select count(*) from t1 as x1 join t1 as x2 on x2.a = x1.c and x1.b < 2 join t1 as x3 on x3.a = x1.c; count(*) 20000 update spj_counts_at_startup set val = val + (select sum(val) from ndbinfo.counters where block_name='DBSPJ' and counter_name='SCAN_ROWS_RETURNED') - (select val from spj_save_counts where counter_name='SCAN_ROWS_RETURNED') where counter_name='SCAN_ROWS_RETURNED'; drop table t1; drop table tx; create table t1 (a int, b int, primary key(a) using hash) engine = ndb; insert into t1 values (1, 2); insert into t1 values (2, 3); insert into t1 values (3, 1); set ndb_join_pushdown=true; explain extended select * from t1, t1 as t2 where t1.a in (1,3,5) and t2.a = t1.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 3 100.00 Parent of 2 pushed join@1; Using where with pushed condition: ((`test`.`t1`.`a` in (1,3,5)) and (`test`.`t1`.`b` is not null)) 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t1`.`a` in (1,3,5))) select * from t1, t1 as t2 where t1.a in (1,3,5) and t2.a = t1.b; a b a b 1 2 2 3 3 1 1 2 drop table t1; create table t1 (a int, b int, primary key(a)) engine = ndb; insert into t1 values (1, 2); insert into t1 values (2, 3); insert into t1 values (3, 1); set ndb_join_pushdown=true; explain extended select * from t1, t1 as t2 where t1.a in (1,3,5) and t2.a = t1.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 3 100.00 Parent of 2 pushed join@1; Using where with pushed condition: ((`test`.`t1`.`a` in (1,3,5)) and (`test`.`t1`.`b` is not null)) 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t1`.`a` in (1,3,5))) select * from t1, t1 as t2 where t1.a in (1,3,5) and t2.a = t1.b; a b a b 1 2 2 3 3 1 1 2 explain extended select * from t1, t1 as t2 where t1.a in (1,3,5) and t2.a = t1.b order by t1.a desc; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 3 100.00 Parent of 2 pushed join@1; Using where with pushed condition: ((`test`.`t1`.`a` in (1,3,5)) and (`test`.`t1`.`b` is not null)) 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t1`.`a` in (1,3,5))) order by `test`.`t1`.`a` desc select * from t1, t1 as t2 where t1.a in (1,3,5) and t2.a = t1.b order by t1.a desc; a b a b 3 1 1 2 1 2 2 3 drop table t1; set ndb_join_pushdown=true; create table t1 (a int, b int, primary key(a)) engine = ndb; create table t2 (c int, d int, primary key(c)) engine = ndb; create table t3 (a3 int, b3 int, c3 int not null, d3 int not null, primary key(a3, b3)) engine = ndb; create table t3_hash (a3 int, b3 int, c3 int not null, d3 int not null, primary key(a3, b3) using hash) engine = ndb; insert into t1 values (0x1f, 0x2f); insert into t1 values (0x2f, 0x3f); insert into t1 values (0x3f, 0x1f); insert into t2 values (0x1f, 0x2f); insert into t2 values (0x2f, 0x3f); insert into t2 values (0x3f, 0x1f); insert into t3 values (0x1f, 0x2f, 1, 0x1f); insert into t3 values (0x2f, 0x3f, 2, 0x2f); insert into t3 values (0x3f, 0x1f, 3, 0x3f); insert into t3_hash values (0x1f, 0x2f, 1, 0x1f); insert into t3_hash values (0x2f, 0x3f, 2, 0x2f); insert into t3_hash values (0x3f, 0x1f, 3, 0x3f); explain extended select * from t3 x, t3 y, t1 where y.a3=x.d3 and y.b3=x.b3 and t1.a = y.d3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL NULL NULL NULL NULL 3 100.00 Parent of 3 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 test.x.d3,test.x.b3 1 100.00 Child of 'x' in pushed join@1 1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.y.d3 1 100.00 Child of 'y' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t3` `x` join `test`.`t3` `y` join `test`.`t1` where ((`test`.`t1`.`a` = `test`.`y`.`d3`) and (`test`.`y`.`b3` = `test`.`x`.`b3`) and (`test`.`y`.`a3` = `test`.`x`.`d3`)) select * from t3 x, t3 y, t1 where y.a3=x.d3 and y.b3=x.b3 and t1.a = y.d3; a3 b3 c3 d3 a3 b3 c3 d3 a b 31 47 1 31 31 47 1 31 31 47 47 63 2 47 47 63 2 47 47 63 63 31 3 63 63 31 3 63 63 31 explain extended select * from t3 x, t3 y, t3 z, t3 z2, t1 where y.a3=x.d3 and y.b3=x.b3 and z.a3=y.d3 and z.b3=y.b3 and z2.a3=z.d3 and z2.b3=z.b3 and t1.a = z2.d3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL NULL NULL NULL NULL 3 100.00 Parent of 5 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 test.x.d3,test.x.b3 1 100.00 Child of 'x' in pushed join@1 1 SIMPLE z eq_ref PRIMARY PRIMARY 8 test.y.d3,test.x.b3 1 100.00 Child of 'y' in pushed join@1 1 SIMPLE z2 eq_ref PRIMARY PRIMARY 8 test.z.d3,test.y.b3 1 100.00 Child of 'z' in pushed join@1; Using where 1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.z2.d3 1 100.00 Child of 'z2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3`,`test`.`z`.`a3` AS `a3`,`test`.`z`.`b3` AS `b3`,`test`.`z`.`c3` AS `c3`,`test`.`z`.`d3` AS `d3`,`test`.`z2`.`a3` AS `a3`,`test`.`z2`.`b3` AS `b3`,`test`.`z2`.`c3` AS `c3`,`test`.`z2`.`d3` AS `d3`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t3` `x` join `test`.`t3` `y` join `test`.`t3` `z` join `test`.`t3` `z2` join `test`.`t1` where ((`test`.`t1`.`a` = `test`.`z2`.`d3`) and (`test`.`z2`.`a3` = `test`.`z`.`d3`) and (`test`.`z`.`a3` = `test`.`y`.`d3`) and (`test`.`y`.`b3` = `test`.`x`.`b3`) and (`test`.`z`.`b3` = `test`.`x`.`b3`) and (`test`.`z2`.`b3` = `test`.`x`.`b3`) and (`test`.`y`.`a3` = `test`.`x`.`d3`)) select * from t3 x, t3 y, t3 z, t3 z2, t1 where y.a3=x.d3 and y.b3=x.b3 and z.a3=y.d3 and z.b3=y.b3 and z2.a3=z.d3 and z2.b3=z.b3 and t1.a = z2.d3; a3 b3 c3 d3 a3 b3 c3 d3 a3 b3 c3 d3 a3 b3 c3 d3 a b 31 47 1 31 31 47 1 31 31 47 1 31 31 47 1 31 31 47 47 63 2 47 47 63 2 47 47 63 2 47 47 63 2 47 47 63 63 31 3 63 63 31 3 63 63 31 3 63 63 31 3 63 63 31 explain extended select straight_join * from t1 x, t1 y where y.a=0x1f and x.b = 0x1f; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL NULL NULL NULL NULL 3 100.00 Using where with pushed condition: (`test`.`x`.`b` = 0x1f) 1 SIMPLE y const PRIMARY PRIMARY 4 const 1 100.00 Warnings: Note 9999 Can't push table 'y' as child of 'x', their dependency is 'const' Note 1003 /* select#1 */ select straight_join `test`.`x`.`a` AS `a`,`test`.`x`.`b` AS `b`,`test`.`y`.`a` AS `a`,`test`.`y`.`b` AS `b` from `test`.`t1` `x` join `test`.`t1` `y` where ((`test`.`y`.`a` = 0x1f) and (`test`.`x`.`b` = 0x1f)) select straight_join * from t1 x, t1 y where y.a=0x1f and x.b = 0x1f; a b a b 63 31 31 47 explain extended select straight_join * from t1 x, t1 y where y.a=x.b and x.b = 0x1f; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL NULL NULL NULL NULL 3 100.00 Using where with pushed condition: (`test`.`x`.`b` = 0x1f) 1 SIMPLE y const PRIMARY PRIMARY 4 const 1 100.00 Using where Warnings: Note 9999 Can't push table 'y' as child of 'x', their dependency is 'const' Note 1003 /* select#1 */ select straight_join `test`.`x`.`a` AS `a`,`test`.`x`.`b` AS `b`,`test`.`y`.`a` AS `a`,`test`.`y`.`b` AS `b` from `test`.`t1` `x` join `test`.`t1` `y` where ((`test`.`y`.`a` = `test`.`x`.`b`) and (`test`.`x`.`b` = 0x1f)) select straight_join * from t1 x, t1 y where y.a=x.b and x.b = 0x1f; a b a b 63 31 31 47 create unique index t3_d3 on t3(d3); create unique index t3_d3 on t3_hash(d3); commit; explain extended select * from t3 x, t3 y where x.d3=31 and y.a3=x.d3 and y.b3=x.b3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x const t3_d3 t3_d3 4 const 1 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 const,test.x.b3 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = `test`.`x`.`b3`) and (`test`.`x`.`d3` = 31) and (`test`.`y`.`a3` = 31)) select * from t3 x, t3 y where x.d3=31 and y.a3=x.d3 and y.b3=x.b3; a3 b3 c3 d3 a3 b3 c3 d3 31 47 1 31 31 47 1 31 explain extended select * from t3 x, t3 y where x.d3=0 and y.a3=x.d3 and y.b3=x.b3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x const t3_d3 t3_d3 4 const 1 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 const,test.x.b3 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = `test`.`x`.`b3`) and (`test`.`x`.`d3` = 0) and (`test`.`y`.`a3` = 0)) select * from t3 x, t3 y where x.d3=0 and y.a3=x.d3 and y.b3=x.b3; a3 b3 c3 d3 a3 b3 c3 d3 explain extended select * from t1 x, t3 y where y.d3=x.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL NULL NULL NULL NULL 3 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x`.`b` is not null) 1 SIMPLE y eq_ref t3_d3 t3_d3 4 test.x.b 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a` AS `a`,`test`.`x`.`b` AS `b`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t1` `x` join `test`.`t3` `y` where (`test`.`y`.`d3` = `test`.`x`.`b`) select * from t1 x, t3 y where y.d3=x.b; a b a3 b3 c3 d3 31 47 47 63 2 47 47 63 63 31 3 63 63 31 31 47 1 31 explain extended select * from t3 x, t3 y where x.d3=31 and y.d3=x.b3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x const t3_d3 t3_d3 4 const 1 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref t3_d3 t3_d3 4 test.x.b3 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`d3` = `test`.`x`.`b3`) and (`test`.`x`.`d3` = 31)) select * from t3 x, t3 y where x.d3=31 and y.d3=x.b3; a3 b3 c3 d3 a3 b3 c3 d3 31 47 1 31 47 63 2 47 explain extended select * from t3 x, t3 y where x.d3=31 and y.d3=x.c3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x const t3_d3 t3_d3 4 const 1 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref t3_d3 t3_d3 4 test.x.c3 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`d3` = `test`.`x`.`c3`) and (`test`.`x`.`d3` = 31)) select * from t3 x, t3 y where x.d3=31 and y.d3=x.c3; a3 b3 c3 d3 a3 b3 c3 d3 explain extended select * from t3 x, t3 y where ((x.a3=0x2f and x.b3=0x3f) or x.d3=0x1f) and (y.a3=x.d3 and y.b3=x.b3); id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x index_merge PRIMARY,t3_d3 t3_d3,PRIMARY 4,8 NULL 2 100.00 Parent of 2 pushed join@1; Using sort_union(t3_d3,PRIMARY); Using where with pushed condition: (((`test`.`x`.`a3` = 0x2f) and (`test`.`x`.`b3` = 0x3f)) or (`test`.`x`.`d3` = 0x1f)) 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 test.x.d3,test.x.b3 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = `test`.`x`.`b3`) and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (((`test`.`x`.`a3` = 0x2f) and (`test`.`x`.`b3` = 0x3f)) or (`test`.`x`.`d3` = 0x1f))) select * from t3 x, t3 y where ((x.a3=0x2f and x.b3=0x3f) or x.d3=0x1f) and (y.a3=x.d3 and y.b3=x.b3); a3 b3 c3 d3 a3 b3 c3 d3 31 47 1 31 31 47 1 31 47 63 2 47 47 63 2 47 explain extended select * from t3_hash x, t3_hash y where ((x.a3=0x2f and x.b3=0x3f) or x.d3=0x1f) and (y.a3=x.d3 and y.b3=x.b3); id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x index_merge PRIMARY,t3_d3 PRIMARY,t3_d3 8,4 NULL 2 100.00 Parent of 2 pushed join@1; Using sort_union(PRIMARY,t3_d3); Using where with pushed condition: (((`test`.`x`.`a3` = 0x2f) and (`test`.`x`.`b3` = 0x3f)) or (`test`.`x`.`d3` = 0x1f)) 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 test.x.d3,test.x.b3 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3_hash` `x` join `test`.`t3_hash` `y` where ((`test`.`y`.`b3` = `test`.`x`.`b3`) and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (((`test`.`x`.`a3` = 0x2f) and (`test`.`x`.`b3` = 0x3f)) or (`test`.`x`.`d3` = 0x1f))) select * from t3_hash x, t3_hash y where ((x.a3=0x2f and x.b3=0x3f) or x.d3=0x1f) and (y.a3=x.d3 and y.b3=x.b3); a3 b3 c3 d3 a3 b3 c3 d3 31 47 1 31 31 47 1 31 47 63 2 47 47 63 2 47 explain extended select * from t3 x, t3 y where x.d3>=31 and y.d3=x.b3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x range t3_d3 t3_d3 4 NULL 3 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x`.`d3` >= 31) 1 SIMPLE y eq_ref t3_d3 t3_d3 4 test.x.b3 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`d3` = `test`.`x`.`b3`) and (`test`.`x`.`d3` >= 31)) select * from t3 x, t3 y where x.d3>=31 and y.d3=x.b3; a3 b3 c3 d3 a3 b3 c3 d3 31 47 1 31 47 63 2 47 47 63 2 47 63 31 3 63 63 31 3 63 31 47 1 31 insert into t1 values (0x4f, null); select * from t1 left join t1 as t2 on t2.a = t1.b; a b a b 31 47 47 63 47 63 63 31 63 31 31 47 79 NULL NULL NULL drop table t1,t2,t3, t3_hash; create table t3 (a3 int, b3 int, c3 int, d3 int, primary key(b3, a3)) engine = ndb; create table t3_hash (a3 int, b3 int, c3 int, d3 int, primary key(b3,a3) using hash) engine = ndb; create table t3_unq (pk int, a3 int not null, b3 int not null, c3 int, d3 int, primary key(pk) using hash, unique key(b3,a3) using hash) engine = ndb; insert into t3 values (0x1f, 0x2f, 1, 0x1f); insert into t3 values (0x2f, 0x3f, 2, 0x2f); insert into t3 values (0x3f, 0x1f, 3, 0x3f); insert into t3_hash values (0x1f, 0x2f, 1, 0x1f); insert into t3_hash values (0x2f, 0x3f, 2, 0x2f); insert into t3_hash values (0x3f, 0x1f, 3, 0x3f); insert into t3_unq values (1001, 0x1f, 0x2f, 1, 0x1f); insert into t3_unq values (1002, 0x2f, 0x3f, 2, 0x2f); insert into t3_unq values (1003, 0x3f, 0x1f, 3, 0x3f); explain extended select * from t3 x, t3 y where y.a3=x.d3 and y.b3=x.b3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL PRIMARY NULL NULL NULL 3 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x`.`d3` is not null) 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 test.x.b3,test.x.d3 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = `test`.`x`.`b3`) and (`test`.`y`.`a3` = `test`.`x`.`d3`)) select * from t3 x, t3 y where y.a3=x.d3 and y.b3=x.b3; a3 b3 c3 d3 a3 b3 c3 d3 31 47 1 31 31 47 1 31 47 63 2 47 47 63 2 47 63 31 3 63 63 31 3 63 explain extended select * from t3_hash x, t3_hash y where y.a3=x.d3 and y.b3=x.b3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL PRIMARY NULL NULL NULL 3 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x`.`d3` is not null) 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 test.x.b3,test.x.d3 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3_hash` `x` join `test`.`t3_hash` `y` where ((`test`.`y`.`b3` = `test`.`x`.`b3`) and (`test`.`y`.`a3` = `test`.`x`.`d3`)) select * from t3_hash x, t3_hash y where y.a3=x.d3 and y.b3=x.b3; a3 b3 c3 d3 a3 b3 c3 d3 31 47 1 31 31 47 1 31 47 63 2 47 47 63 2 47 63 31 3 63 63 31 3 63 explain extended select * from t3_unq x, t3_unq y where y.a3=x.d3 and y.b3=x.b3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL b3 NULL NULL NULL 3 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x`.`d3` is not null) 1 SIMPLE y eq_ref b3 b3 8 test.x.b3,test.x.d3 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`pk` AS `pk`,`test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`pk` AS `pk`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3_unq` `x` join `test`.`t3_unq` `y` where ((`test`.`y`.`b3` = `test`.`x`.`b3`) and (`test`.`y`.`a3` = `test`.`x`.`d3`)) select * from t3_unq x, t3_unq y where y.a3=x.d3 and y.b3=x.b3; pk a3 b3 c3 d3 pk a3 b3 c3 d3 1001 31 47 1 31 1001 31 47 1 31 1002 47 63 2 47 1002 47 63 2 47 1003 63 31 3 63 1003 63 31 3 63 explain extended select * from t3 x, t3 y where y.a3=x.d3 and y.b3=x.b3 and x.a3=0x2f and x.b3=0x3f; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x const PRIMARY PRIMARY 8 const,const 1 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x`.`d3` is not null) 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 const,test.x.d3 1 100.00 Child of 'x' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = `test`.`x`.`b3`) and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f) and (`test`.`x`.`b3` = 0x3f)) select * from t3 x, t3 y where y.a3=x.d3 and y.b3=x.b3 and x.a3=0x2f and x.b3=0x3f; a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 explain extended select * from t3_hash x, t3_hash y where y.a3=x.d3 and y.b3=x.b3 and x.a3=0x2f and x.b3=0x3f; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x const PRIMARY PRIMARY 8 const,const 1 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x`.`d3` is not null) 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 const,test.x.d3 1 100.00 Child of 'x' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3_hash` `x` join `test`.`t3_hash` `y` where ((`test`.`y`.`b3` = `test`.`x`.`b3`) and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f) and (`test`.`x`.`b3` = 0x3f)) select * from t3_hash x, t3_hash y where y.a3=x.d3 and y.b3=x.b3 and x.a3=0x2f and x.b3=0x3f; a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 explain extended select * from t3_unq x, t3_unq y where y.a3=x.d3 and y.b3=x.b3 and x.a3=0x2f and x.b3=0x3f; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x const b3 b3 8 const,const 1 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x`.`d3` is not null) 1 SIMPLE y eq_ref b3 b3 8 const,test.x.d3 1 100.00 Child of 'x' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select `test`.`x`.`pk` AS `pk`,`test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`pk` AS `pk`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3_unq` `x` join `test`.`t3_unq` `y` where ((`test`.`y`.`b3` = `test`.`x`.`b3`) and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f) and (`test`.`x`.`b3` = 0x3f)) select * from t3_unq x, t3_unq y where y.a3=x.d3 and y.b3=x.b3 and x.a3=0x2f and x.b3=0x3f; pk a3 b3 c3 d3 pk a3 b3 c3 d3 1002 47 63 2 47 1002 47 63 2 47 drop table t3, t3_hash, t3_unq; create table t3 (a3 int, b3 int, c3 int, d3 int, primary key(a3), unique key(d3)) engine = ndb; insert into t3 values (0x1f, 0x2f, 1, 0x1f); insert into t3 values (0x2f, 0x3f, 2, 0x2f); insert into t3 values (0x3f, 0x1f, 3, 0x3f); insert into t3 values (0x4f, 0, null, null); explain extended select * from t3 as t1 left outer join t3 as t2 on t2.d3 = t1.d3 left outer join t3 as t3 on t3.a3 = t2.d3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 4 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 ref d3 d3 5 test.t1.d3 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.d3 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a3` AS `a3`,`test`.`t1`.`b3` AS `b3`,`test`.`t1`.`c3` AS `c3`,`test`.`t1`.`d3` AS `d3`,`test`.`t2`.`a3` AS `a3`,`test`.`t2`.`b3` AS `b3`,`test`.`t2`.`c3` AS `c3`,`test`.`t2`.`d3` AS `d3`,`test`.`t3`.`a3` AS `a3`,`test`.`t3`.`b3` AS `b3`,`test`.`t3`.`c3` AS `c3`,`test`.`t3`.`d3` AS `d3` from `test`.`t3` `t1` left join `test`.`t3` `t2` on((`test`.`t2`.`d3` = `test`.`t1`.`d3`)) left join `test`.`t3` on((`test`.`t3`.`a3` = `test`.`t2`.`d3`)) where 1 select * from t3 as t1 left outer join t3 as t2 on t2.d3 = t1.d3 left outer join t3 as t3 on t3.a3 = t2.d3; a3 b3 c3 d3 a3 b3 c3 d3 a3 b3 c3 d3 31 47 1 31 31 47 1 31 31 47 1 31 47 63 2 47 47 63 2 47 47 63 2 47 63 31 3 63 63 31 3 63 63 31 3 63 79 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL explain extended select * from t3 as t1 left outer join t3 as t2 on t2.d3 = t1.a3 left outer join t3 as t3 on t3.a3 = t2.d3 where t1.d3 = 47; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ref d3 d3 5 const 1 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 ref d3 d3 5 test.t1.a3 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.d3 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a3` AS `a3`,`test`.`t1`.`b3` AS `b3`,`test`.`t1`.`c3` AS `c3`,`test`.`t1`.`d3` AS `d3`,`test`.`t2`.`a3` AS `a3`,`test`.`t2`.`b3` AS `b3`,`test`.`t2`.`c3` AS `c3`,`test`.`t2`.`d3` AS `d3`,`test`.`t3`.`a3` AS `a3`,`test`.`t3`.`b3` AS `b3`,`test`.`t3`.`c3` AS `c3`,`test`.`t3`.`d3` AS `d3` from `test`.`t3` `t1` left join `test`.`t3` `t2` on((`test`.`t2`.`d3` = `test`.`t1`.`a3`)) left join `test`.`t3` on((`test`.`t3`.`a3` = `test`.`t2`.`d3`)) where (`test`.`t1`.`d3` = 47) select * from t3 as t1 left outer join t3 as t2 on t2.d3 = t1.a3 left outer join t3 as t3 on t3.a3 = t2.d3 where t1.d3 = 47; a3 b3 c3 d3 a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 47 63 2 47 explain extended select * from t3 as t1 left outer join t3 as t2 on t2.d3 = t1.a3 left outer join t3 as t3 on t3.a3 = t2.d3 where t1.d3 >= 47; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 range d3 d3 5 NULL 3 100.00 Parent of 3 pushed join@1; Using where with pushed condition: (`test`.`t1`.`d3` >= 47) 1 SIMPLE t2 ref d3 d3 5 test.t1.a3 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.d3 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a3` AS `a3`,`test`.`t1`.`b3` AS `b3`,`test`.`t1`.`c3` AS `c3`,`test`.`t1`.`d3` AS `d3`,`test`.`t2`.`a3` AS `a3`,`test`.`t2`.`b3` AS `b3`,`test`.`t2`.`c3` AS `c3`,`test`.`t2`.`d3` AS `d3`,`test`.`t3`.`a3` AS `a3`,`test`.`t3`.`b3` AS `b3`,`test`.`t3`.`c3` AS `c3`,`test`.`t3`.`d3` AS `d3` from `test`.`t3` `t1` left join `test`.`t3` `t2` on((`test`.`t2`.`d3` = `test`.`t1`.`a3`)) left join `test`.`t3` on((`test`.`t3`.`a3` = `test`.`t2`.`d3`)) where (`test`.`t1`.`d3` >= 47) select * from t3 as t1 left outer join t3 as t2 on t2.d3 = t1.a3 left outer join t3 as t3 on t3.a3 = t2.d3 where t1.d3 >= 47; a3 b3 c3 d3 a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 47 63 2 47 63 31 3 63 63 31 3 63 63 31 3 63 explain extended select * from t3 as t1 left outer join t3 as t2 on t2.d3 = t1.a3 left outer join t3 as t3 on t3.a3 = t2.d3 where t1.d3 is null; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ref d3 d3 5 const 1 100.00 Parent of 3 pushed join@1; Using where with pushed condition: isnull(`test`.`t1`.`d3`) 1 SIMPLE t2 ref d3 d3 5 test.t1.a3 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.d3 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a3` AS `a3`,`test`.`t1`.`b3` AS `b3`,`test`.`t1`.`c3` AS `c3`,`test`.`t1`.`d3` AS `d3`,`test`.`t2`.`a3` AS `a3`,`test`.`t2`.`b3` AS `b3`,`test`.`t2`.`c3` AS `c3`,`test`.`t2`.`d3` AS `d3`,`test`.`t3`.`a3` AS `a3`,`test`.`t3`.`b3` AS `b3`,`test`.`t3`.`c3` AS `c3`,`test`.`t3`.`d3` AS `d3` from `test`.`t3` `t1` left join `test`.`t3` `t2` on((`test`.`t2`.`d3` = `test`.`t1`.`a3`)) left join `test`.`t3` on((`test`.`t3`.`a3` = `test`.`t2`.`d3`)) where isnull(`test`.`t1`.`d3`) select * from t3 as t1 left outer join t3 as t2 on t2.d3 = t1.a3 left outer join t3 as t3 on t3.a3 = t2.d3 where t1.d3 is null; a3 b3 c3 d3 a3 b3 c3 d3 a3 b3 c3 d3 79 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL explain extended select * from t3 as t1 left outer join t3 as t2 on t2.d3 = t1.a3 left outer join t3 as t3 on t3.a3 = t2.d3 where t1.d3 is not null; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 range d3 d3 5 NULL 3 100.00 Parent of 3 pushed join@1; Using where with pushed condition: (`test`.`t1`.`d3` is not null) 1 SIMPLE t2 ref d3 d3 5 test.t1.a3 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.d3 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a3` AS `a3`,`test`.`t1`.`b3` AS `b3`,`test`.`t1`.`c3` AS `c3`,`test`.`t1`.`d3` AS `d3`,`test`.`t2`.`a3` AS `a3`,`test`.`t2`.`b3` AS `b3`,`test`.`t2`.`c3` AS `c3`,`test`.`t2`.`d3` AS `d3`,`test`.`t3`.`a3` AS `a3`,`test`.`t3`.`b3` AS `b3`,`test`.`t3`.`c3` AS `c3`,`test`.`t3`.`d3` AS `d3` from `test`.`t3` `t1` left join `test`.`t3` `t2` on((`test`.`t2`.`d3` = `test`.`t1`.`a3`)) left join `test`.`t3` on((`test`.`t3`.`a3` = `test`.`t2`.`d3`)) where (`test`.`t1`.`d3` is not null) select * from t3 as t1 left outer join t3 as t2 on t2.d3 = t1.a3 left outer join t3 as t3 on t3.a3 = t2.d3 where t1.d3 is not null; a3 b3 c3 d3 a3 b3 c3 d3 a3 b3 c3 d3 31 47 1 31 31 47 1 31 31 47 1 31 47 63 2 47 47 63 2 47 47 63 2 47 63 31 3 63 63 31 3 63 63 31 3 63 drop table t3; create table t3 (a3 int not null, b3 int not null, c3 int, d3 int, primary key(a3), unique key(b3,d3), unique key(c3,b3), unique key(c3,d3)) engine = ndb; insert into t3 values (0x1f, 0x2f, 1, 0x1f); insert into t3 values (0x2f, 0x3f, 2, 0x2f); insert into t3 values (0x3f, 0x1f, 3, 0x3f); insert into t3 values (0x40, 0, null, null); insert into t3 values (0x41, 0, null, null); insert into t3 values (0x42, 0, 4, null); insert into t3 values (0x43, 0, null, 0x43); explain extended select straight_join * from t3 as x join t3 as y on x.b3 = y.b3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL b3 NULL NULL NULL 7 100.00 Parent of 2 pushed join@1 1 SIMPLE y ref b3 b3 4 test.x.b3 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where (`test`.`y`.`b3` = `test`.`x`.`b3`) select straight_join * from t3 as x join t3 as y on x.b3 = y.b3; a3 b3 c3 d3 a3 b3 c3 d3 31 47 1 31 31 47 1 31 47 63 2 47 47 63 2 47 63 31 3 63 63 31 3 63 64 0 NULL NULL 64 0 NULL NULL 64 0 NULL NULL 65 0 NULL NULL 64 0 NULL NULL 66 0 4 NULL 64 0 NULL NULL 67 0 NULL 67 65 0 NULL NULL 64 0 NULL NULL 65 0 NULL NULL 65 0 NULL NULL 65 0 NULL NULL 66 0 4 NULL 65 0 NULL NULL 67 0 NULL 67 66 0 4 NULL 64 0 NULL NULL 66 0 4 NULL 65 0 NULL NULL 66 0 4 NULL 66 0 4 NULL 66 0 4 NULL 67 0 NULL 67 67 0 NULL 67 64 0 NULL NULL 67 0 NULL 67 65 0 NULL NULL 67 0 NULL 67 66 0 4 NULL 67 0 NULL 67 67 0 NULL 67 explain extended select straight_join * from t3 as x join t3 as y on x.b3 = y.b3 where y.d3 = 0x2f; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL b3 NULL NULL NULL 7 100.00 Parent of 2 pushed join@1 1 SIMPLE y ref b3 b3 9 test.x.b3,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = `test`.`x`.`b3`) and (`test`.`y`.`d3` = 0x2f)) select straight_join * from t3 as x join t3 as y on x.b3 = y.b3 where y.d3 = 0x2f; a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 explain extended select straight_join * from t3 as x join t3 as y on x.c3 = y.c3 where y.d3 = 0x2f; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL c3,c3_2 NULL NULL NULL 7 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x`.`c3` is not null) 1 SIMPLE y ref c3,c3_2 c3 5 test.x.c3 1 100.00 Child of 'x' in pushed join@1; Using where with pushed condition: (`test`.`y`.`d3` = 0x2f) Warnings: Note 1003 /* select#1 */ select straight_join `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`c3` = `test`.`x`.`c3`) and (`test`.`y`.`d3` = 0x2f)) select straight_join * from t3 as x join t3 as y on x.c3 = y.c3 where y.d3 = 0x2f; a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 explain extended select straight_join * from t3 as x join t3 as y on x.d3 = y.d3 where y.b3 = 0x2f; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL NULL NULL NULL NULL 7 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x`.`d3` is not null) 1 SIMPLE y ref b3 b3 9 const,test.x.d3 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`d3` = `test`.`x`.`d3`) and (`test`.`y`.`b3` = 0x2f)) select straight_join * from t3 as x join t3 as y on x.d3 = y.d3 where y.b3 = 0x2f; a3 b3 c3 d3 a3 b3 c3 d3 31 47 1 31 31 47 1 31 explain extended select straight_join * from t3 as x join t3 as y on x.d3 = y.d3 where y.b3 = 0x20+0x2f; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL NULL NULL NULL NULL 7 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x`.`d3` is not null) 1 SIMPLE y ref b3 b3 9 const,test.x.d3 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`d3` = `test`.`x`.`d3`) and (`test`.`y`.`b3` = <cache>((0x20 + 0x2f)))) select straight_join * from t3 as x join t3 as y on x.d3 = y.d3 where y.b3 = 0x20+0x2f; a3 b3 c3 d3 a3 b3 c3 d3 explain extended select straight_join * from t3 as x join t3 as y on x.b3 = y.b3 where y.d3 is not null; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL b3 NULL NULL NULL 7 100.00 Parent of 2 pushed join@1 1 SIMPLE y ref b3 b3 4 test.x.b3 1 100.00 Child of 'x' in pushed join@1; Using where with pushed condition: (`test`.`y`.`d3` is not null) Warnings: Note 1003 /* select#1 */ select straight_join `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = `test`.`x`.`b3`) and (`test`.`y`.`d3` is not null)) select straight_join * from t3 as x join t3 as y on x.b3 = y.b3 where y.d3 is not null; a3 b3 c3 d3 a3 b3 c3 d3 31 47 1 31 31 47 1 31 47 63 2 47 47 63 2 47 63 31 3 63 63 31 3 63 64 0 NULL NULL 67 0 NULL 67 65 0 NULL NULL 67 0 NULL 67 66 0 4 NULL 67 0 NULL 67 67 0 NULL 67 67 0 NULL 67 explain extended select straight_join * from t3 as x join t3 as y on x.b3 = y.b3 where y.d3 is null; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL b3 NULL NULL NULL 7 100.00 1 SIMPLE y ref b3 b3 9 test.x.b3,const 1 100.00 Using where with pushed condition: isnull(`test`.`y`.`d3`) Warnings: Note 1003 /* select#1 */ select straight_join `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = `test`.`x`.`b3`) and isnull(`test`.`y`.`d3`)) select straight_join * from t3 as x join t3 as y on x.b3 = y.b3 where y.d3 is null; a3 b3 c3 d3 a3 b3 c3 d3 64 0 NULL NULL 64 0 NULL NULL 64 0 NULL NULL 65 0 NULL NULL 64 0 NULL NULL 66 0 4 NULL 65 0 NULL NULL 64 0 NULL NULL 65 0 NULL NULL 65 0 NULL NULL 65 0 NULL NULL 66 0 4 NULL 66 0 4 NULL 64 0 NULL NULL 66 0 4 NULL 65 0 NULL NULL 66 0 4 NULL 66 0 4 NULL 67 0 NULL 67 64 0 NULL NULL 67 0 NULL 67 65 0 NULL NULL 67 0 NULL 67 66 0 4 NULL explain extended select straight_join * from t3 as x join t3 as y on x.c3 = y.c3 where y.b3 = 0; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL c3,c3_2 NULL NULL NULL 7 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x`.`c3` is not null) 1 SIMPLE y ref b3,c3,c3_2 c3 9 test.x.c3,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`c3` = `test`.`x`.`c3`) and (`test`.`y`.`b3` = 0)) select straight_join * from t3 as x join t3 as y on x.c3 = y.c3 where y.b3 = 0; a3 b3 c3 d3 a3 b3 c3 d3 66 0 4 NULL 66 0 4 NULL explain extended select straight_join * from t3 as x join t3 as y on x.c3 = y.c3 where y.b3 is null; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE Warnings: Note 1003 /* select#1 */ select straight_join `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where 0 select straight_join * from t3 as x join t3 as y on x.c3 = y.c3 where y.b3 is null; a3 b3 c3 d3 a3 b3 c3 d3 explain extended select straight_join * from t3 as x1 join t3 as y1 on x1.b3 = y1.b3 and x1.d3 = y1.d3 join t3 as x2 on x2.b3 = y1.b3 join t3 as y2 on y2.b3 = x2.c3 and y2.d3 = x1.c3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL b3,c3,c3_2 NULL NULL NULL 7 100.00 Parent of 4 pushed join@1; Using where with pushed condition: ((`test`.`x1`.`d3` is not null) and (`test`.`x1`.`c3` is not null)) 1 SIMPLE y1 ref b3 b3 9 test.x1.b3,test.x1.d3 1 100.00 Child of 'x1' in pushed join@1 1 SIMPLE x2 ref b3,c3,c3_2 b3 4 test.x1.b3 1 100.00 Child of 'x1' in pushed join@1; Using where with pushed condition: (`test`.`x2`.`c3` is not null) 1 SIMPLE y2 ref b3 b3 9 test.x2.c3,test.x1.c3 1 100.00 Child of 'x2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`x1`.`a3` AS `a3`,`test`.`x1`.`b3` AS `b3`,`test`.`x1`.`c3` AS `c3`,`test`.`x1`.`d3` AS `d3`,`test`.`y1`.`a3` AS `a3`,`test`.`y1`.`b3` AS `b3`,`test`.`y1`.`c3` AS `c3`,`test`.`y1`.`d3` AS `d3`,`test`.`x2`.`a3` AS `a3`,`test`.`x2`.`b3` AS `b3`,`test`.`x2`.`c3` AS `c3`,`test`.`x2`.`d3` AS `d3`,`test`.`y2`.`a3` AS `a3`,`test`.`y2`.`b3` AS `b3`,`test`.`y2`.`c3` AS `c3`,`test`.`y2`.`d3` AS `d3` from `test`.`t3` `x1` join `test`.`t3` `y1` join `test`.`t3` `x2` join `test`.`t3` `y2` where ((`test`.`y1`.`d3` = `test`.`x1`.`d3`) and (`test`.`y1`.`b3` = `test`.`x1`.`b3`) and (`test`.`x2`.`b3` = `test`.`x1`.`b3`) and (`test`.`y2`.`d3` = `test`.`x1`.`c3`) and (`test`.`y2`.`b3` = `test`.`x2`.`c3`)) select straight_join * from t3 as x1 join t3 as y1 on x1.b3 = y1.b3 and x1.d3 = y1.d3 join t3 as x2 on x2.b3 = y1.b3 join t3 as y2 on y2.b3 = x2.c3 and y2.d3 = x1.c3; a3 b3 c3 d3 a3 b3 c3 d3 a3 b3 c3 d3 a3 b3 c3 d3 prepare stmt1 from 'select straight_join * from t3 as x join t3 as y on x.b3 = y.b3 where y.d3 = 0x2f'; execute stmt1; a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 execute stmt1; a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 drop prepare stmt1; execute stmt1; ERROR HY000: Unknown prepared statement handler (stmt1) given to EXECUTE prepare stmt1 from 'select straight_join * from t3 as x join t3 as y on x.b3 = y.b3 where y.d3 = 0x2f'; prepare stmt1 from 'select straight_join * from t3 as x join t3 as y on x.b3 = y.b3 where y.d3 = 0x2f'; drop prepare stmt1; prepare stmt1 from 'explain select straight_join * from t3 as x join t3 as y on x.b3 = y.b3 where y.d3 = 0x2f'; execute stmt1; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE x ALL b3 NULL NULL NULL 7 Parent of 2 pushed join@1 1 SIMPLE y ref b3 b3 9 test.x.b3,const 1 Child of 'x' in pushed join@1 execute stmt1; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE x ALL b3 NULL NULL NULL 7 Parent of 2 pushed join@1 1 SIMPLE y ref b3 b3 9 test.x.b3,const 1 Child of 'x' in pushed join@1 commit; execute stmt1; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE x ALL b3 NULL NULL NULL 7 Parent of 2 pushed join@1 1 SIMPLE y ref b3 b3 9 test.x.b3,const 1 Child of 'x' in pushed join@1 drop index b3 on t3; execute stmt1; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE x ALL NULL NULL NULL NULL 7 1 SIMPLE y ALL NULL NULL NULL NULL 7 Using where with pushed condition; Using join buffer (Block Nested Loop) create unique index b3 on t3(b3,d3); execute stmt1; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE x ALL b3 NULL NULL NULL 7 Parent of 2 pushed join@1 1 SIMPLE y ref b3 b3 9 test.x.b3,const 1 Child of 'x' in pushed join@1 drop prepare stmt1; prepare stmt1 from 'explain select straight_join * from t3 as x join t3 as y on x.b3 = y.b3 where y.d3 = ?'; set @a=47; execute stmt1 using @a; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE x ALL b3 NULL NULL NULL 7 Parent of 2 pushed join@1 1 SIMPLE y ref b3 b3 9 test.x.b3,const 1 Child of 'x' in pushed join@1 set @a=0; execute stmt1 using @a; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE x ALL b3 NULL NULL NULL 7 Parent of 2 pushed join@1 1 SIMPLE y ref b3 b3 9 test.x.b3,const 1 Child of 'x' in pushed join@1 set @a=null; execute stmt1 using @a; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE x ALL b3 NULL NULL NULL 7 1 SIMPLE y ref b3 b3 9 test.x.b3,const 1 Using where prepare stmt1 from 'select straight_join * from t3 as x join t3 as y on x.b3 = y.b3 where y.d3 = ?'; set @a=47; execute stmt1 using @a; a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 set @a=0; execute stmt1 using @a; a3 b3 c3 d3 a3 b3 c3 d3 set @a=null; execute stmt1 using @a; a3 b3 c3 d3 a3 b3 c3 d3 prepare stmt1 from 'explain select straight_join * from t3 as x join t3 as y on x.b3 = y.b3 and x.d3 = y.d3 where x.a3 = ?'; set @a=47; execute stmt1 using @a; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE x const PRIMARY,b3 PRIMARY 4 const 1 Parent of 2 pushed join@1; Using where with pushed condition 1 SIMPLE y ref b3 b3 9 test.x.b3,test.x.d3 1 Child of 'x' in pushed join@1 set @a=0; execute stmt1 using @a; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE x const PRIMARY,b3 PRIMARY 4 const 1 Parent of 2 pushed join@1; Using where with pushed condition 1 SIMPLE y ref b3 b3 9 test.x.b3,test.x.d3 1 Child of 'x' in pushed join@1 set @a=null; execute stmt1 using @a; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables prepare stmt1 from 'select straight_join * from t3 as x join t3 as y on x.b3 = y.b3 and x.d3 = y.d3 where x.a3 = ?'; set @a=47; execute stmt1 using @a; a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 set @a=0; execute stmt1 using @a; a3 b3 c3 d3 a3 b3 c3 d3 set @a=null; execute stmt1 using @a; a3 b3 c3 d3 a3 b3 c3 d3 drop table t3; set @a=47; execute stmt1 using @a; ERROR 42S02: Table 'test.t3' doesn't exist create table t1 (a int primary key, b int, c int, index(b,c)) engine = ndb; insert into t1 values (1,null, 2); insert into t1 values (2,1, null); insert into t1 values (3,2,2); insert into t1 values (4,null, 2); insert into t1 values (5,1, null); insert into t1 values (6,2,2); set ndb_join_pushdown=false; select * from t1 join t1 as t2 on (t2.b = t1.b or t2.b = t1.a) join t1 as t3 on t3.a = t2.a join t1 as t4 on t4.a = t3.b; a b c a b c a b c a b c 1 NULL 2 2 1 NULL 2 1 NULL 1 NULL 2 1 NULL 2 5 1 NULL 5 1 NULL 1 NULL 2 2 1 NULL 2 1 NULL 2 1 NULL 1 NULL 2 2 1 NULL 3 2 2 3 2 2 2 1 NULL 2 1 NULL 5 1 NULL 5 1 NULL 1 NULL 2 2 1 NULL 6 2 2 6 2 2 2 1 NULL 3 2 2 3 2 2 3 2 2 2 1 NULL 3 2 2 6 2 2 6 2 2 2 1 NULL 5 1 NULL 2 1 NULL 2 1 NULL 1 NULL 2 5 1 NULL 5 1 NULL 5 1 NULL 1 NULL 2 6 2 2 3 2 2 3 2 2 2 1 NULL 6 2 2 6 2 2 6 2 2 2 1 NULL set ndb_join_pushdown=true; explain extended select * from t1 join t1 as t2 on (t2.b = t1.b or t2.b = t1.a) join t1 as t3 on t3.a = t2.a join t1 as t4 on t4.a = t3.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t2 ALL PRIMARY,b NULL NULL NULL 6 100.00 Parent of 3 pushed join@1 1 SIMPLE t3 eq_ref PRIMARY,b PRIMARY 4 test.t2.a 1 100.00 Child of 't2' in pushed join@1; Using where with pushed condition: (`test`.`t3`.`b` is not null) 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 4 test.t3.b 1 100.00 Child of 't3' in pushed join@1 1 SIMPLE t1 ALL PRIMARY,b NULL NULL NULL 6 100.00 Range checked for each record (index map: 0x3) Warnings: Note 9999 Table 't1' is not pushable: Access type was not chosen at 'prepare' time Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`c` AS `c`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` join `test`.`t1` `t4` where ((`test`.`t3`.`a` = `test`.`t2`.`a`) and (`test`.`t4`.`a` = `test`.`t3`.`b`) and ((`test`.`t1`.`b` = `test`.`t2`.`b`) or (`test`.`t1`.`a` = `test`.`t2`.`b`))) select * from t1 join t1 as t2 on (t2.b = t1.b or t2.b = t1.a) join t1 as t3 on t3.a = t2.a join t1 as t4 on t4.a = t3.b; a b c a b c a b c a b c 1 NULL 2 2 1 NULL 2 1 NULL 1 NULL 2 1 NULL 2 5 1 NULL 5 1 NULL 1 NULL 2 2 1 NULL 2 1 NULL 2 1 NULL 1 NULL 2 2 1 NULL 3 2 2 3 2 2 2 1 NULL 2 1 NULL 5 1 NULL 5 1 NULL 1 NULL 2 2 1 NULL 6 2 2 6 2 2 2 1 NULL 3 2 2 3 2 2 3 2 2 2 1 NULL 3 2 2 6 2 2 6 2 2 2 1 NULL 5 1 NULL 2 1 NULL 2 1 NULL 1 NULL 2 5 1 NULL 5 1 NULL 5 1 NULL 1 NULL 2 6 2 2 3 2 2 3 2 2 2 1 NULL 6 2 2 6 2 2 6 2 2 2 1 NULL explain extended select * from t1 where b in (select x.a from t1 as x join t1 as y on (y.a = x.b)) xor c > 5; id select_type table type possible_keys key key_len ref rows filtered Extra 1 PRIMARY t1 ALL NULL NULL NULL NULL 6 100.00 Using where 2 DEPENDENT SUBQUERY x eq_ref PRIMARY,b PRIMARY 4 func 1 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x`.`b` is not null); Full scan on NULL key 2 DEPENDENT SUBQUERY y eq_ref PRIMARY PRIMARY 4 test.x.b 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t1` where (<in_optimizer>(`test`.`t1`.`b`,<exists>(/* select#2 */ select 1 from `test`.`t1` `x` join `test`.`t1` `y` where ((`test`.`y`.`a` = `test`.`x`.`b`) and trigcond_if(outer_field_is_not_null, (<cache>(`test`.`t1`.`b`) = `test`.`x`.`a`), true)))) xor (`test`.`t1`.`c` > 5)) select * from t1 where b in (select x.a from t1 as x join t1 as y on (y.a = x.b)) xor c > 5; a b c 3 2 2 6 2 2 explain extended select t1.a, (select straight_join x.a from t1 as x join t1 as y on x.a=y.b where y.a = t1.b) from t1; id select_type table type possible_keys key key_len ref rows filtered Extra 1 PRIMARY t1 ALL NULL NULL NULL NULL 6 100.00 2 DEPENDENT SUBQUERY x ALL PRIMARY NULL NULL NULL 6 100.00 2 DEPENDENT SUBQUERY y eq_ref PRIMARY,b PRIMARY 4 test.t1.b 1 100.00 Using where Warnings: Note 1276 Field or reference 'test.t1.b' of SELECT #2 was resolved in SELECT #1 Note 9999 Can't push table 'y' as child of 'x', column 't1.b' is outside scope of pushable join Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,(/* select#2 */ select straight_join `test`.`x`.`a` from `test`.`t1` `x` join `test`.`t1` `y` where ((`test`.`y`.`b` = `test`.`x`.`a`) and (`test`.`y`.`a` = `test`.`t1`.`b`))) AS `(select straight_join x.a from t1 as x join t1 as y on x.a=y.b where y.a = t1.b)` from `test`.`t1` select t1.a, (select straight_join x.a from t1 as x join t1 as y on x.a=y.b where y.a = t1.b) from t1; a (select straight_join x.a from t1 as x join t1 as y on x.a=y.b where y.a = t1.b) 1 NULL 2 NULL 3 1 4 NULL 5 NULL 6 1 drop table t1; create table t1 (a int primary key, b int) engine = ndb; create table t2 (a int primary key, b int) engine = myisam; insert into t1 values(1,1), (2,2), (3,3), (4,4); insert into t2 values(1,1), (2,2), (3,3), (4,4); explain extended select * from t1, t2, t1 as t3 where t2.a = t1.b and t3.a = t2.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 4 100.00 1 SIMPLE t2 ALL PRIMARY NULL NULL NULL 4 75.00 Using where; Using join buffer (Block Nested Loop) 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.b 1 100.00 Warnings: Note 9999 Table 't2' not in ndb engine, not pushable Note 9999 Cannot push table 't3' as child of table 't1'. Doing so would prevent using join buffer for table 't2'. Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b` from `test`.`t1` join `test`.`t2` join `test`.`t1` `t3` where ((`test`.`t3`.`a` = `test`.`t2`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`b`)) select * from t1, t2, t1 as t3 where t2.a = t1.b and t3.a = t2.b; a b a b a b 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 drop table t1, t2; create table t1 (a int primary key, b int, c blob) engine = ndb; create table t2 (a int primary key, b int) engine = ndb; insert into t1 values (1,1, 'kalle'); insert into t1 values (2,1, 'kalle'); insert into t1 values (3,3, 'kalle'); insert into t1 values (4,1, 'kalle'); insert into t2 values (1,1); insert into t2 values (2,1); insert into t2 values (3,3); insert into t2 values (4,1); set ndb_join_pushdown=true; explain extended select t1.a, t1.b, t2.a, t2.b from t1, t2 where t2.a = t1.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 4 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`t1`.`b` is not null) 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t2` where (`test`.`t2`.`a` = `test`.`t1`.`b`) select t1.a, t1.b, t2.a, t2.b from t1, t2 where t2.a = t1.b; a b a b 1 1 1 1 2 1 1 1 3 3 3 3 4 1 1 1 explain extended select t1.a, t1.b, t2.a, t2.b from t1, t2 where t2.a = t1.b and t1.a = 2; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`t1`.`b` is not null) 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t2` where ((`test`.`t1`.`a` = 2) and (`test`.`t2`.`a` = `test`.`t1`.`b`)) select t1.a, t1.b, t2.a, t2.b from t1, t2 where t2.a = t1.b and t1.a = 2; a b a b 2 1 1 1 explain extended select t1.a, t1.b, t2.a, t2.b from t1, t2 where t1.a = t2.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t2 ALL NULL NULL NULL NULL 4 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`t2`.`b` is not null) 1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.b 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t2` where (`test`.`t1`.`a` = `test`.`t2`.`b`) select t1.a, t1.b, t2.a, t2.b from t1, t2 where t2.a = t1.b; a b a b 1 1 1 1 2 1 1 1 3 3 3 3 4 1 1 1 explain extended select t1.a, t1.b, t2.a, t2.b from t1, t2 where t1.a = t2.b and t2.a = 3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t2 const PRIMARY PRIMARY 4 const 1 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`t2`.`b` is not null) 1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.b 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t2` where ((`test`.`t2`.`a` = 3) and (`test`.`t1`.`a` = `test`.`t2`.`b`)) select t1.a, t1.b, t2.a, t2.b from t1, t2 where t1.a = t2.b and t2.a = 3; a b a b 3 3 3 3 explain extended select * from t1, t2 where t2.a = t1.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 4 100.00 Using where with pushed condition: (`test`.`t1`.`b` is not null) 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 100.00 Warnings: Note 9999 Table 't1' is not pushable: select list can't contain BLOB columns Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t2` where (`test`.`t2`.`a` = `test`.`t1`.`b`) select * from t1, t2 where t2.a = t1.b; a b c a b 1 1 kalle 1 1 2 1 kalle 1 1 3 3 kalle 3 3 4 1 kalle 1 1 explain extended select * from t1, t2 where t2.a = t1.b and t1.a = 2; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 100.00 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 const 1 100.00 Warnings: Note 9999 Table 't1' was optimized away, or const'ified by optimizer Note 1003 /* select#1 */ select '2' AS `a`,'1' AS `b`,'kalle' AS `c`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t2` where ((`test`.`t2`.`a` = '1')) select * from t1, t2 where t2.a = t1.b and t1.a = 2; a b c a b 2 1 kalle 1 1 explain extended select * from t1, t2 where t1.a = t2.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t2 ALL NULL NULL NULL NULL 4 100.00 Using where with pushed condition: (`test`.`t2`.`b` is not null) 1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.b 1 100.00 Warnings: Note 9999 Table 't1' is not pushable: select list can't contain BLOB columns Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t2` where (`test`.`t1`.`a` = `test`.`t2`.`b`) select * from t1, t2 where t2.a = t1.b; a b c a b 1 1 kalle 1 1 2 1 kalle 1 1 3 3 kalle 3 3 4 1 kalle 1 1 explain extended select * from t1, t2 where t1.a = t2.b and t2.a = 3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t2 const PRIMARY PRIMARY 4 const 1 100.00 Using where with pushed condition: (`test`.`t2`.`b` is not null) 1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.b 1 100.00 Warnings: Note 9999 Table 't1' is not pushable: select list can't contain BLOB columns Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t2` where ((`test`.`t2`.`a` = 3) and (`test`.`t1`.`a` = `test`.`t2`.`b`)) select * from t1, t2 where t1.a = t2.b and t2.a = 3; a b c a b 3 3 kalle 3 3 drop table t1, t2; create table t3 (a3 int, b3 tinyint, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 0x2f, 1, 0x1f); insert into t3 values (0x2f, 0x3f, 2, 0x2f); insert into t3 values (0x3f, 0x1f, 3, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3="63"; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 5 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f) and (`test`.`y`.`b3` = '63')) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3="63"; a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 drop table t3; create table t3 (a3 int, b3 tinyint unsigned, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 0x2f, 1, 0x1f); insert into t3 values (0x2f, 0x3f, 2, 0x2f); insert into t3 values (0x3f, 0x1f, 3, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=(60+3); id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 5 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = <cache>((60 + 3))) and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=(60+3); a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 drop table t3; create table t3 (a3 int, b3 smallint, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 0x2f, 1, 0x1f); insert into t3 values (0x2f, 0x3f, 2, 0x2f); insert into t3 values (0x3f, 0x1f, 3, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=(60+3); id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 6 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = <cache>((60 + 3))) and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=(60+3); a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 drop table t3; create table t3 (a3 int, b3 smallint unsigned, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 0x2f, 1, 0x1f); insert into t3 values (0x2f, 0x3f, 2, 0x2f); insert into t3 values (0x3f, 0x1f, 3, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=(60+3); id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 6 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = <cache>((60 + 3))) and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=(60+3); a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 drop table t3; create table t3 (a3 int, b3 mediumint, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 0x2f, 1, 0x1f); insert into t3 values (0x2f, 0x3f, 2, 0x2f); insert into t3 values (0x3f, 0x1f, 3, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=(60+3); id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 7 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = <cache>((60 + 3))) and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=(60+3); a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 drop table t3; create table t3 (a3 int, b3 mediumint unsigned, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 0x2f, 1, 0x1f); insert into t3 values (0x2f, 0x3f, 2, 0x2f); insert into t3 values (0x3f, 0x1f, 3, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=(60+3); id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 7 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = <cache>((60 + 3))) and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=(60+3); a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 drop table t3; create table t3 (a3 int, b3 int, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 0x2f, 1, 0x1f); insert into t3 values (0x2f, 0x3f, 2, 0x2f); insert into t3 values (0x3f, 0x1f, 3, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=(60+3); id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = <cache>((60 + 3))) and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=(60+3); a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 drop table t3; create table t3 (a3 int, b3 int unsigned, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 0x2f, 1, 0x1f); insert into t3 values (0x2f, 0x3f, 2, 0x2f); insert into t3 values (0x3f, 0x1f, 3, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=(60+3); id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = <cache>((60 + 3))) and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=(60+3); a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 drop table t3; create table t3 (a3 int, b3 bigint, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 0x2f, 1, 0x1f); insert into t3 values (0x2f, 0x3f, 2, 0x2f); insert into t3 values (0x3f, 0x1f, 3, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=(60+3); id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 12 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1; Using where with pushed condition: (`test`.`y`.`b3` = 63) Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = 63) and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=(60+3); a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 drop table t3; create table t3 (a3 int, b3 bigint unsigned, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 0x2f, 1, 0x1f); insert into t3 values (0x2f, 0x3f, 2, 0x2f); insert into t3 values (0x3f, 0x1f, 3, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=(60+3); id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 12 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1; Using where with pushed condition: (`test`.`y`.`b3` = 63) Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = 63) and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=(60+3); a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 drop table t3; create table t3 (a3 int, b3 boolean, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 0, 1, 0x1f); insert into t3 values (0x2f, 1, 2, 0x2f); insert into t3 values (0x3f, 0, 3, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=1; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 5 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = 1) and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=1; a3 b3 c3 d3 a3 b3 c3 d3 47 1 2 47 47 1 2 47 drop table t3; create table t3 (a3 int, b3 float, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 2.71, 1, 0x1f); insert into t3 values (0x2f, 3.00, 2, 0x2f); insert into t3 values (0x3f, 0.50, 3, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=3.0; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1; Using where with pushed condition: (`test`.`y`.`b3` = 3.0) Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f) and (`test`.`y`.`b3` = 3.0)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=3.0; a3 b3 c3 d3 a3 b3 c3 d3 47 3 2 47 47 3 2 47 drop table t3; create table t3 (a3 int, b3 float unsigned, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 2.71, 1, 0x1f); insert into t3 values (0x2f, 3.00, 2, 0x2f); insert into t3 values (0x3f, 0.50, 3, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=3.0; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1; Using where with pushed condition: (`test`.`y`.`b3` = 3.0) Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f) and (`test`.`y`.`b3` = 3.0)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=3.0; a3 b3 c3 d3 a3 b3 c3 d3 47 3 2 47 47 3 2 47 drop table t3; create table t3 (a3 int, b3 double, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 2.71, 1, 0x1f); insert into t3 values (0x2f, 3.14, 2, 0x2f); insert into t3 values (0x3f, 0.50, 3, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=3.14; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 12 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f) and (`test`.`y`.`b3` = 3.14)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=3.14; a3 b3 c3 d3 a3 b3 c3 d3 47 3.14 2 47 47 3.14 2 47 drop table t3; create table t3 (a3 int, b3 double unsigned, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 2.71, 1, 0x1f); insert into t3 values (0x2f, 3.14, 2, 0x2f); insert into t3 values (0x3f, 0.50, 3, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=3.14; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 12 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f) and (`test`.`y`.`b3` = 3.14)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=3.14; a3 b3 c3 d3 a3 b3 c3 d3 47 3.14 2 47 47 3.14 2 47 drop table t3; create table t3 (a3 int, b3 decimal, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 0x2f, 1, 0x1f); insert into t3 values (0x2f, 0x3f, 2, 0x2f); insert into t3 values (0x3f, 0x1f, 3, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=63; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 9 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f) and (`test`.`y`.`b3` = 63)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=63; a3 b3 c3 d3 a3 b3 c3 d3 47 63 2 47 47 63 2 47 drop table t3; create table t3 (a3 int, b3 decimal(12,4), c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 2.71, 1, 0x1f); insert into t3 values (0x2f, 3.14, 2, 0x2f); insert into t3 values (0x3f, 0.50, 3, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=3.14; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 10 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = 3.14) and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3=3.14; a3 b3 c3 d3 a3 b3 c3 d3 47 3.1400 2 47 47 3.1400 2 47 drop table t3; create table t3 (a3 int, b3 date, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, '1905-05-17', 1, 0x1f); insert into t3 values (0x2f, '2000-02-28', 2, 0x2f); insert into t3 values (0x3f, '2000-02-29', 3, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3='2000-02-28'; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 7 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = '2000-02-28') and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3='2000-02-28'; a3 b3 c3 d3 a3 b3 c3 d3 47 2000-02-28 2 47 47 2000-02-28 2 47 drop table t3; create table t3 (a3 int, b3 datetime, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, '1905-05-17 12:30:00', 1, 0x1f); insert into t3 values (0x2f, '2000-02-28 23:59:00', 2, 0x2f); insert into t3 values (0x3f, '2000-02-29 12:59:59', 2, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3='2000-02-28 23:59'; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 12 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = '2000-02-28 23:59') and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3='2000-02-28 23:59'; a3 b3 c3 d3 a3 b3 c3 d3 47 2000-02-28 23:59:00 2 47 47 2000-02-28 23:59:00 2 47 drop table t3; create table t3 (a3 int, b3 time, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, '12:30:00', 1, 0x1f); insert into t3 values (0x2f, '23:59:00', 2, 0x2f); insert into t3 values (0x3f, '12:59:59', 2, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3='23:59'; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 7 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1; Using where with pushed condition: (`test`.`y`.`b3` = 235900) Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f) and (`test`.`y`.`b3` = 235900)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3='23:59'; a3 b3 c3 d3 a3 b3 c3 d3 47 23:59:00 2 47 47 23:59:00 2 47 drop table t3; create table t3 (a3 int, b3 char(16), c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 'Ole', 1, 0x1f); insert into t3 values (0x2f, 'Dole', 2, 0x2f); insert into t3 values (0x3f, 'Doffen', 2, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3='Dole'; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 20 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1; Using where with pushed condition: (`test`.`y`.`b3` = 'Dole') Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = 'Dole') and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3='Dole'; a3 b3 c3 d3 a3 b3 c3 d3 47 Dole 2 47 47 Dole 2 47 drop table t3; create table t3 (a3 int, b3 varchar(16), c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 'Ole', 1, 0x1f); insert into t3 values (0x2f, 'Dole', 2, 0x2f); insert into t3 values (0x3f, 'Doffen', 2, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3='Dole'; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 22 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1; Using where with pushed condition: (`test`.`y`.`b3` = 'Dole') Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = 'Dole') and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3='Dole'; a3 b3 c3 d3 a3 b3 c3 d3 47 Dole 2 47 47 Dole 2 47 drop table t3; create table t3 (a3 int, b3 varchar(512), c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 'Ole', 1, 0x1f); insert into t3 values (0x2f, 'Dole', 2, 0x2f); insert into t3 values (0x3f, 'Doffen', 2, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3='Dole'; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 518 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1; Using where with pushed condition: (`test`.`y`.`b3` = 'Dole') Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = 'Dole') and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3='Dole'; a3 b3 c3 d3 a3 b3 c3 d3 47 Dole 2 47 47 Dole 2 47 drop table t3; create table t3 (a3 int, b3 binary(16), c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 'Ole', 1, 0x1f); insert into t3 values (0x2f, 'Dole', 2, 0x2f); insert into t3 values (0x3f, 'Doffen', 2, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3='Dole'; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 20 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = 'Dole') and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3='Dole'; a3 b3 c3 d3 a3 b3 c3 d3 drop table t3; create table t3 (a3 int, b3 varbinary(16), c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 'Ole', 1, 0x1f); insert into t3 values (0x2f, 'Dole', 2, 0x2f); insert into t3 values (0x3f, 'Doffen', 2, 0x3f); explain extended select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3='Dole'; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 4 const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 22 test.x.d3,const 1 100.00 Child of 'x' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = 'Dole') and (`test`.`y`.`a3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 0x2f)) select * from t3 x, t3 y where x.a3=0x2f and y.a3=x.d3 and y.b3='Dole'; a3 b3 c3 d3 a3 b3 c3 d3 47 Dole 2 47 47 Dole 2 47 drop table t3; create table t3 (a3 int, b3 tinyint, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values (0x1f, 0x2f, 1, 0x1f); insert into t3 values (0x2f, 0x3f, 2, 0x2f); insert into t3 values (0x3f, 0x1f, 3, 0x3f); explain extended select * from t3 x, t3 y where y.a3=x.b3 and y.b3="63"; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL NULL NULL NULL NULL 3 100.00 1 SIMPLE y eq_ref PRIMARY PRIMARY 5 test.x.b3,const 1 100.00 Using where Warnings: Note 9999 Can't push table 'y' as child, column 'a3' does not have same datatype as ref'ed column 'x.b3' Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`a3` = `test`.`x`.`b3`) and (`test`.`y`.`b3` = '63')) select * from t3 x, t3 y where y.a3=x.b3 and y.b3="63"; a3 b3 c3 d3 a3 b3 c3 d3 31 47 1 31 47 63 2 47 drop table t3; create table t3 (a3 varchar(16), b3 int, c3 int not null, d3 int not null, primary key(a3,b3)) engine = ndb; insert into t3 values ('Ole', 0x1f, 1, 0x1f); insert into t3 values ('Dole', 0x2f, 2, 0x2f); insert into t3 values ('Doffen', 0x3f, 2, 0x3f); explain extended select * from t3 x, t3 y where x.a3='Dole' and x.b3=0x2f and y.a3=x.a3 and y.b3=x.d3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x const PRIMARY PRIMARY 22 const,const 1 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x`.`a3` = 'Dole') 1 SIMPLE y eq_ref PRIMARY PRIMARY 22 const,test.x.d3 1 100.00 Child of 'x' in pushed join@1; Using where with pushed condition: (`test`.`y`.`a3` = 'Dole') Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 'Dole') and (`test`.`y`.`a3` = 'Dole') and (`test`.`x`.`b3` = 0x2f)) select * from t3 x, t3 y where x.a3='Dole' and x.b3=0x2f and y.a3=x.a3 and y.b3=x.d3; a3 b3 c3 d3 a3 b3 c3 d3 Dole 47 2 47 Dole 47 2 47 explain extended select * from t3 x, t3 y where x.a3='Dole' and y.a3=x.a3 and y.b3=x.d3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY PRIMARY 18 const 3 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x`.`a3` = 'Dole') 1 SIMPLE y eq_ref PRIMARY PRIMARY 22 const,test.x.d3 1 100.00 Child of 'x' in pushed join@1; Using where with pushed condition: (`test`.`y`.`a3` = 'Dole') Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a3` AS `a3`,`test`.`x`.`b3` AS `b3`,`test`.`x`.`c3` AS `c3`,`test`.`x`.`d3` AS `d3`,`test`.`y`.`a3` AS `a3`,`test`.`y`.`b3` AS `b3`,`test`.`y`.`c3` AS `c3`,`test`.`y`.`d3` AS `d3` from `test`.`t3` `x` join `test`.`t3` `y` where ((`test`.`y`.`b3` = `test`.`x`.`d3`) and (`test`.`x`.`a3` = 'Dole') and (`test`.`y`.`a3` = 'Dole')) select * from t3 x, t3 y where x.a3='Dole' and y.a3=x.a3 and y.b3=x.d3; a3 b3 c3 d3 a3 b3 c3 d3 Dole 47 2 47 Dole 47 2 47 drop table t3; create table t1 (k int primary key, b int) engine = ndb; insert into t1 values (1,1), (2,1), (3,1), (4,1); explain extended select * from t1 straight_join t1 as t2 on t2.k = t1.b+0 straight_join t1 as t3 on t3.k = t2.b straight_join t1 as t4 on t4.k = t1.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 4 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`t1`.`b` is not null) 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 func 1 100.00 Parent of 2 pushed join@2; Using where with pushed condition: (`test`.`t2`.`b` is not null) 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.b 1 100.00 Child of 't2' in pushed join@2 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 9999 Can't push table 't2' as child, column 'k' does neither 'ref' a column nor a constant Note 9999 Can't push table 't3' as child of 't1', column 't2.b' is outside scope of pushable join Note 1003 /* select#1 */ select `test`.`t1`.`k` AS `k`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`k` AS `k`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`k` AS `k`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`k` AS `k`,`test`.`t4`.`b` AS `b` from `test`.`t1` straight_join `test`.`t1` `t2` straight_join `test`.`t1` `t3` straight_join `test`.`t1` `t4` where ((`test`.`t3`.`k` = `test`.`t2`.`b`) and (`test`.`t4`.`k` = `test`.`t1`.`b`) and (`test`.`t2`.`k` = (`test`.`t1`.`b` + 0))) select * from t1 straight_join t1 as t2 on t2.k = t1.b+0 straight_join t1 as t3 on t3.k = t2.b straight_join t1 as t4 on t4.k = t1.b; k b k b k b k b 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 4 1 1 1 1 1 1 1 explain extended select * from t1 straight_join t1 as t2 on t2.k = t1.b+0 straight_join t1 as t3 on t3.k = t2.b straight_join t1 as t4 on t4.k = t1.b where t2.k = 1; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 4 100.00 Parent of 2 pushed join@1; Using where 1 SIMPLE t2 const PRIMARY PRIMARY 4 const 1 100.00 Parent of 2 pushed join@2; Using where with pushed condition: (`test`.`t2`.`b` is not null) 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.b 1 100.00 Child of 't2' in pushed join@2 1 SIMPLE t4 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 9999 Can't push table 't2' as child of 't1', their dependency is 'const' Note 9999 Can't push table 't3' as child of 't1', column 't2.b' is outside scope of pushable join Note 1003 /* select#1 */ select `test`.`t1`.`k` AS `k`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`k` AS `k`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`k` AS `k`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`k` AS `k`,`test`.`t4`.`b` AS `b` from `test`.`t1` straight_join `test`.`t1` `t2` straight_join `test`.`t1` `t3` straight_join `test`.`t1` `t4` where ((`test`.`t3`.`k` = `test`.`t2`.`b`) and (`test`.`t4`.`k` = `test`.`t1`.`b`) and (`test`.`t2`.`k` = 1) and (1 = (`test`.`t1`.`b` + 0))) select * from t1 straight_join t1 as t2 on t2.k = t1.b+0 straight_join t1 as t3 on t3.k = t2.b straight_join t1 as t4 on t4.k = t1.b where t2.k = 1; k b k b k b k b 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 4 1 1 1 1 1 1 1 drop table t1; create table t1 ( a int not null auto_increment, b char(255) not null, c int not null, d char(255) not null, primary key (`a`,`b`) ) engine=ndbcluster; explain extended select count(*) from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d join t1 as t3 on t3.a = t2.c and t3.b = t2.d; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 3000 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 259 test.t1.c,test.t1.d 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 259 test.t2.c,test.t2.d 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`b` = `test`.`t1`.`d`) and (`test`.`t2`.`a` = `test`.`t1`.`c`) and (`test`.`t3`.`b` = `test`.`t2`.`d`) and (`test`.`t3`.`a` = `test`.`t2`.`c`)) select count(*) from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d join t1 as t3 on t3.a = t2.c and t3.b = t2.d; count(*) 2996 explain extended select count(*) from t1 join t1 as t2 on t2.a = t1.c join t1 as t3 on t3.a = t2.c and t3.b = t2.d; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 3000 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 ref PRIMARY PRIMARY 4 test.t1.c 30 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 259 test.t2.c,test.t2.d 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`a` = `test`.`t1`.`c`) and (`test`.`t3`.`b` = `test`.`t2`.`d`) and (`test`.`t3`.`a` = `test`.`t2`.`c`)) select count(*) from t1 join t1 as t2 on t2.a = t1.c join t1 as t3 on t3.a = t2.c and t3.b = t2.d; count(*) 8990 explain extended select count(*) from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d join t1 as t3 on t3.a = t2.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 3000 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 259 test.t1.c,test.t1.d 1 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 ref PRIMARY PRIMARY 4 test.t2.c 30 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`b` = `test`.`t1`.`d`) and (`test`.`t2`.`a` = `test`.`t1`.`c`) and (`test`.`t3`.`a` = `test`.`t2`.`c`)) select count(*) from t1 join t1 as t2 on t2.a = t1.c and t2.b = t1.d join t1 as t3 on t3.a = t2.c; count(*) 8988 alter table t1 partition by key(a); explain extended select count(*) from t1 join t1 as t2 on t2.a = t1.c join t1 as t3 on t3.a = t2.c and t3.b = t2.d; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 3000 100.00 Parent of 3 pushed join@1 1 SIMPLE t2 ref PRIMARY PRIMARY 4 test.t1.c 30 100.00 Child of 't1' in pushed join@1 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 259 test.t2.c,test.t2.d 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` join `test`.`t1` `t2` join `test`.`t1` `t3` where ((`test`.`t2`.`a` = `test`.`t1`.`c`) and (`test`.`t3`.`b` = `test`.`t2`.`d`) and (`test`.`t3`.`a` = `test`.`t2`.`c`)) select count(*) from t1 join t1 as t2 on t2.a = t1.c join t1 as t3 on t3.a = t2.c and t3.b = t2.d; count(*) 8990 drop table t1; create logfile group lg1 add undofile 'undofile.dat' initial_size 1m undo_buffer_size = 1m engine=ndb; create tablespace ts1 add datafile 'datafile.dat' use logfile group lg1 initial_size 6m engine ndb; create table t1 (a int not null, b int not null storage disk, c int not null storage memory, primary key(a)) tablespace ts1 storage disk engine = ndb; insert into t1 values (10, 11, 11); insert into t1 values (11, 12, 12); insert into t1 values (12, 13, 13); create table t2 (a int not null, b int not null, primary key(a)) engine = ndb; insert into t2 values (10, 11); insert into t2 values (11, 12); insert into t2 values (12, 13); explain extended select * from t1, t2 where t1.c = t2.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 3 100.00 Parent of 2 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.c 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t2` where (`test`.`t2`.`a` = `test`.`t1`.`c`) select * from t1, t2 where t1.c = t2.a; a b c a b 10 11 11 11 12 11 12 12 12 13 explain extended select * from t1, t2 where t1.a=11 and t1.c = t2.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 100.00 Parent of 2 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.c 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t2` where ((`test`.`t2`.`a` = `test`.`t1`.`c`) and (`test`.`t1`.`a` = 11)) select * from t1, t2 where t1.a=11 and t1.c = t2.a; a b c a b 11 12 12 12 13 explain extended select * from t2, t1 where t2.b = t1.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t2 ALL NULL NULL NULL NULL 3 100.00 Parent of 2 pushed join@1 1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.b 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t2` join `test`.`t1` where (`test`.`t1`.`a` = `test`.`t2`.`b`) select * from t2, t1 where t2.b = t1.a; a b a b c 10 11 11 12 12 11 12 12 13 13 explain extended select * from t2, t1 where t2.a=11 and t2.b = t1.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t2 const PRIMARY PRIMARY 4 const 1 100.00 Parent of 2 pushed join@1 1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.b 1 100.00 Child of 't2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t2` join `test`.`t1` where ((`test`.`t1`.`a` = `test`.`t2`.`b`) and (`test`.`t2`.`a` = 11)) select * from t2, t1 where t2.a=11 and t2.b = t1.a; a b a b c 11 12 12 13 13 explain extended select t1.a, t1.c, t2.a, t2.b from t1, t2 where t1.b = t2.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 3 100.00 Parent of 2 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`c` AS `c`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t2` where (`test`.`t2`.`a` = `test`.`t1`.`b`) select t1.a, t1.c, t2.a, t2.b from t1, t2 where t1.b = t2.a; a c a b 10 11 11 12 11 12 12 13 explain extended select t1.a, t1.c, t2.a, t2.b from t1, t2 where t1.a=11 and t1.b = t2.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 100.00 Parent of 2 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`c` AS `c`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t2` where ((`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t1`.`a` = 11)) select t1.a, t1.c, t2.a, t2.b from t1, t2 where t1.a=11 and t1.b = t2.a; a c a b 11 12 12 13 drop table t1; drop table t2; alter tablespace ts1 drop datafile 'datafile.dat' engine ndb; drop tablespace ts1 engine ndb; drop logfile group lg1 engine ndb; create temporary table old_count select counter_name, sum(val) as val from ndbinfo.counters where block_name='DBSPJ' group by counter_name; create table t1 (a int not null, b int not null, c int not null, primary key(a)) engine = ndb; insert into t1 values (1, 2, 2); insert into t1 values (2, 3, 3); insert into t1 values (3, 4, 4); select * from t1 t1, t1 t2 where t1.a = 2 and t2.a = t1.b; a b c a b c 2 3 3 3 4 4 select count(*) from t1 t1, t1 t2 where t2.a = t1.b; count(*) 2 select count(*) from t1 t1, t1 t2 where t1.a >= 2 and t2.a = t1.b; count(*) 1 create temporary table new_count select counter_name, sum(val) as val from ndbinfo.counters where block_name='DBSPJ' group by counter_name; select new_count.counter_name, new_count.val - old_count.val from new_count, old_count where new_count.counter_name = old_count.counter_name and new_count.counter_name <> 'LOCAL_READS_SENT' and new_count.counter_name <> 'REMOTE_READS_SENT'; counter_name new_count.val - old_count.val CONST_PRUNED_RANGE_SCANS_RECEIVED 0 LOCAL_RANGE_SCANS_SENT 2 LOCAL_TABLE_SCANS_SENT 2 PRUNED_RANGE_SCANS_RECEIVED 0 RANGE_SCANS_RECEIVED 2 READS_NOT_FOUND 2 READS_RECEIVED 1 REMOTE_RANGE_SCANS_SENT 0 SCAN_BATCHES_RETURNED 4 SCAN_ROWS_RETURNED 8 TABLE_SCANS_RECEIVED 2 select 'READS_SENT', sum(new_count.val - old_count.val) from new_count, old_count where new_count.counter_name = old_count.counter_name and (new_count.counter_name = 'LOCAL_READS_SENT' or new_count.counter_name = 'REMOTE_READS_SENT'); READS_SENT sum(new_count.val - old_count.val) READS_SENT 7 drop table old_count; drop table new_count; drop table t1; create table t1 ( a int primary key, b int, c int) engine = ndb; insert into t1 values (1, 2, 3); insert into t1 values (2, 3, 4); insert into t1 values (3, 4, 5); explain extended select * from t1 x, t1 y where x.b=y.a and x.c=4; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL NULL NULL NULL NULL 3 100.00 Parent of 2 pushed join@1; Using where with pushed condition: ((`test`.`x`.`c` = 4) and (`test`.`x`.`b` is not null)) 1 SIMPLE y eq_ref PRIMARY PRIMARY 4 test.x.b 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a` AS `a`,`test`.`x`.`b` AS `b`,`test`.`x`.`c` AS `c`,`test`.`y`.`a` AS `a`,`test`.`y`.`b` AS `b`,`test`.`y`.`c` AS `c` from `test`.`t1` `x` join `test`.`t1` `y` where ((`test`.`x`.`c` = 4) and (`test`.`y`.`a` = `test`.`x`.`b`)) select * from t1 x, t1 y where x.b=y.a and x.c=4; a b c a b c 2 3 4 3 4 5 lookups 1 explain extended select * from t1 x, t1 y, t1 z where x.b=y.a and y.c=4 and y.b=z.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL NULL NULL NULL NULL 3 100.00 Parent of 3 pushed join@1; Using where with pushed condition: (`test`.`x`.`b` is not null) 1 SIMPLE y eq_ref PRIMARY PRIMARY 4 test.x.b 1 100.00 Child of 'x' in pushed join@1; Using where with pushed condition: ((`test`.`y`.`c` = 4) and (`test`.`y`.`b` is not null)) 1 SIMPLE z eq_ref PRIMARY PRIMARY 4 test.y.b 1 100.00 Child of 'y' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`a` AS `a`,`test`.`x`.`b` AS `b`,`test`.`x`.`c` AS `c`,`test`.`y`.`a` AS `a`,`test`.`y`.`b` AS `b`,`test`.`y`.`c` AS `c`,`test`.`z`.`a` AS `a`,`test`.`z`.`b` AS `b`,`test`.`z`.`c` AS `c` from `test`.`t1` `x` join `test`.`t1` `y` join `test`.`t1` `z` where ((`test`.`z`.`a` = `test`.`y`.`b`) and (`test`.`y`.`c` = 4) and (`test`.`y`.`a` = `test`.`x`.`b`)) select * from t1 x, t1 y, t1 z where x.b=y.a and y.c=4 and y.b=z.a; a b c a b c a b c 1 2 3 2 3 4 3 4 5 lookups 5 drop table t1; create table t1( a int not null, b int not null, c int not null, primary key(a,b)) engine = ndb partition by key (a); insert into t1 values (10, 10, 11); insert into t1 values (11, 11, 12); insert into t1 values (12, 12, 13); select * from t1 t1, t1 t2 where t1.a = 10 and t1.b = 10 and t2.a = t1.c and t2.b = t1.c; a b c a b c 10 10 11 11 11 12 select * from t1 t1, t1 t2 where t1.a = 11 and t1.b = 11 and t2.a = t1.c and t2.b = t1.c; a b c a b c 11 11 12 12 12 13 select * from t1 t1, t1 t2 where t2.a = t1.c and t2.b = t1.c order by t1.a; a b c a b c 10 10 11 11 11 12 11 11 12 12 12 13 select count(*) from t1 t1, t1 t2 where t1.a = 11 and t2.a = t1.c and t2.b = t1.c; count(*) 1 scan_count 2 pruned_scan_count 1 sorted_scan_count 1 pushed_queries_defined 3 pushed_queries_dropped 0 pushed_queries_executed 3 pushed_reads 4 drop table t1; create table t1( d int not null, c int not null, a int not null, b int not null, primary key using hash (a,b)) engine = ndb partition by key (a); insert into t1(a,b,c,d) values (10, 10, 11, 11); insert into t1(a,b,c,d) values (11, 11, 12, 12); insert into t1(a,b,c,d) values (12, 12, 13, 13); create index i1 on t1(c,a); explain extended select count(*) from t1 t1, t1 t2 where t1.c = 12 and t1.a = 11 and t2.a = t1.d and t2.b = t1.d; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ref PRIMARY,i1 i1 8 const,const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 8 test.t1.d,test.t1.d 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t2`.`a` = `test`.`t1`.`d`) and (`test`.`t2`.`b` = `test`.`t1`.`d`) and (`test`.`t1`.`a` = 11) and (`test`.`t1`.`c` = 12)) select count(*) from t1 t1, t1 t2 where t1.c = 12 and t1.a = 11 and t2.a = t1.d and t2.b = t1.d; count(*) 1 drop index i1 on t1; pruned_scan_count 1 create index i2 on t1(a,b); explain extended select count(*) from t1 t1, t1 t2 where t1.a = 11 and t1.b<13 and t2.a = t1.c and t2.b = t1.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 range PRIMARY,i2 i2 8 NULL 3 100.00 Parent of 2 pushed join@1; Using where with pushed condition: ((`test`.`t1`.`a` = 11) and (`test`.`t1`.`b` < 13)) 1 SIMPLE t2 eq_ref PRIMARY,i2 PRIMARY 8 test.t1.c,test.t1.c 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t2`.`a` = `test`.`t1`.`c`) and (`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t1`.`a` = 11) and (`test`.`t1`.`b` < 13)) select count(*) from t1 t1, t1 t2 where t1.a = 11 and t1.b<13 and t2.a = t1.c and t2.b = t1.c; count(*) 1 pruned_scan_count 1 explain extended select count(*) from t1 t1, t1 t2 where t1.a >= 12 and t1.a<=12 and t2.a = t1.c and t2.b = t1.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 range PRIMARY,i2 i2 4 NULL 3 100.00 Parent of 2 pushed join@1; Using where with pushed condition: ((`test`.`t1`.`a` >= 12) and (`test`.`t1`.`a` <= 12)) 1 SIMPLE t2 eq_ref PRIMARY,i2 PRIMARY 8 test.t1.c,test.t1.c 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t2`.`a` = `test`.`t1`.`c`) and (`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t1`.`a` >= 12) and (`test`.`t1`.`a` <= 12)) select count(*) from t1 t1, t1 t2 where t1.a >= 12 and t1.a<=12 and t2.a = t1.c and t2.b = t1.c; count(*) 0 pruned_scan_count 1 explain extended select count(*) from t1 t1, t1 t2 where t1.a >= 11 and t1.a<=12 and t2.a = t1.c and t2.b = t1.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 range PRIMARY,i2 i2 4 NULL 3 100.00 Parent of 2 pushed join@1; Using where with pushed condition: ((`test`.`t1`.`a` >= 11) and (`test`.`t1`.`a` <= 12)) 1 SIMPLE t2 eq_ref PRIMARY,i2 PRIMARY 8 test.t1.c,test.t1.c 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t2`.`a` = `test`.`t1`.`c`) and (`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t1`.`a` >= 11) and (`test`.`t1`.`a` <= 12)) select count(*) from t1 t1, t1 t2 where t1.a >= 11 and t1.a<=12 and t2.a = t1.c and t2.b = t1.c; count(*) 1 pruned_scan_count 0 explain extended select count(*) from t1 t1, t1 t2 where (t1.a = 10 or t1.a=12) and t1.b<13 and t2.a = t1.c and t2.b = t1.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 range PRIMARY,i2 i2 8 NULL 6 50.00 Parent of 2 pushed join@1; Using where with pushed condition: (((`test`.`t1`.`a` = 10) or (`test`.`t1`.`a` = 12)) and (`test`.`t1`.`b` < 13)) 1 SIMPLE t2 eq_ref PRIMARY,i2 PRIMARY 8 test.t1.c,test.t1.c 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t2`.`a` = `test`.`t1`.`c`) and (`test`.`t2`.`b` = `test`.`t1`.`c`) and ((`test`.`t1`.`a` = 10) or (`test`.`t1`.`a` = 12)) and (`test`.`t1`.`b` < 13)) select count(*) from t1 t1, t1 t2 where (t1.a = 10 or t1.a=12) and t1.b<13 and t2.a = t1.c and t2.b = t1.c; count(*) 1 pruned_scan_count 2 explain extended select count(*) from t1 t1, t1 t2 where t1.a = 10 and (t1.b<11 or t1.b>11) and t2.a = t1.c and t2.b = t1.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 range PRIMARY,i2 i2 8 NULL 6 100.00 Parent of 2 pushed join@1; Using where with pushed condition: ((`test`.`t1`.`a` = 10) and ((`test`.`t1`.`b` < 11) or (`test`.`t1`.`b` > 11))) 1 SIMPLE t2 eq_ref PRIMARY,i2 PRIMARY 8 test.t1.c,test.t1.c 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t2`.`a` = `test`.`t1`.`c`) and (`test`.`t2`.`b` = `test`.`t1`.`c`) and (`test`.`t1`.`a` = 10) and ((`test`.`t1`.`b` < 11) or (`test`.`t1`.`b` > 11))) select count(*) from t1 t1, t1 t2 where t1.a = 10 and (t1.b<11 or t1.b>11) and t2.a = t1.c and t2.b = t1.c; count(*) 1 pruned_scan_count 2 drop table t1; create table t2( d int not null, e int not null, f int not null, a int not null, b int not null, c int not null, primary key using hash (a,b,c)) engine = ndb partition by key (b,a); insert into t2(a,b,c,d,e,f) values (1, 2, 3, 1, 2, 3); insert into t2(a,b,c,d,e,f) values (1, 2, 4, 1, 2, 3); insert into t2(a,b,c,d,e,f) values (2, 3, 4, 1, 2, 3); insert into t2(a,b,c,d,e,f) values (3, 4, 5, 1, 2, 3); insert into t2(a,b,c,d,e,f) values (4, 5, 6, 1, 2, 3); insert into t2(a,b,c,d,e,f) values (5, 6, 7, 1, 2, 3); insert into t2(a,b,c,d,e,f) values (6, 7, 8, 1, 2, 3); insert into t2(a,b,c,d,e,f) values (7, 8, 9, 1, 2, 3); create index i2_1 on t2(d, a, b, e); explain extended select count(*) from t2 x, t2 y where x.d=1 and x.a=1 and x.b=2 and y.a=x.d and y.b=x.e and y.c=3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY,i2_1 i2_1 12 const,const,const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 12 const,test.x.e,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t2` `x` join `test`.`t2` `y` where ((`test`.`y`.`c` = 3) and (`test`.`y`.`b` = `test`.`x`.`e`) and (`test`.`x`.`b` = 2) and (`test`.`x`.`a` = 1) and (`test`.`x`.`d` = 1) and (`test`.`y`.`a` = 1)) select count(*) from t2 x, t2 y where x.d=1 and x.a=1 and x.b=2 and y.a=x.d and y.b=x.e and y.c=3; count(*) 2 pruned_scan_count 1 drop index i2_1 on t2; create index i2_3 on t2(a, d, b, e); explain extended select count(*) from t2 x, t2 y where x.d=1 and x.a=1 and x.b=2 and y.a=x.d and y.b=x.e and y.c=3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ref PRIMARY,i2_3 i2_3 12 const,const,const 3 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY,i2_3 PRIMARY 12 const,test.x.e,const 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t2` `x` join `test`.`t2` `y` where ((`test`.`y`.`c` = 3) and (`test`.`y`.`b` = `test`.`x`.`e`) and (`test`.`x`.`b` = 2) and (`test`.`x`.`a` = 1) and (`test`.`x`.`d` = 1) and (`test`.`y`.`a` = 1)) select count(*) from t2 x, t2 y where x.d=1 and x.a=1 and x.b=2 and y.a=x.d and y.b=x.e and y.c=3; count(*) 2 pruned_scan_count 1 drop table t2; create table t1 (a binary(10) primary key, b binary(10) not null) engine = ndb; insert into t1 values ('\0123456789', '1234567890'); insert into t1 values ('1234567890', '\0123456789'); explain extended select count(*) from t1 join t1 as t2 on t2.a = t1.b where t1.a = '\0123456789'; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 const PRIMARY PRIMARY 10 const 1 100.00 Parent of 2 pushed join@1; Using where 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 10 test.t1.b 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` join `test`.`t1` `t2` where ((`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t1`.`a` = '\0123456789')) select count(*) from t1 join t1 as t2 on t2.a = t1.b where t1.a = '\0123456789'; count(*) 1 drop table t1; create table t1 (pk int primary key, a int unique key) engine = ndb; insert into t1 values (1,10), (2,20), (3,30); set ndb_join_pushdown = false; explain extended select * from t1 as x right join t1 as y on x.pk = y.pk and x.pk = y.a and x.a = y.pk where y.pk = 2; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE y const PRIMARY PRIMARY 4 const 1 100.00 1 SIMPLE x const PRIMARY,a NULL NULL NULL 1 100.00 Impossible ON condition Warnings: Note 1003 /* select#1 */ select `test`.`x`.`pk` AS `pk`,`test`.`x`.`a` AS `a`,'2' AS `pk`,'20' AS `a` from `test`.`t1` `y` left join `test`.`t1` `x` on((multiple equal(2, `test`.`x`.`pk`, `test`.`x`.`a`))) where 1 select * from t1 as x right join t1 as y on x.pk = y.pk and x.pk = y.a and x.a = y.pk where y.pk = 2; pk a pk a NULL NULL 2 20 set ndb_join_pushdown = true; explain extended select * from t1 as x right join t1 as y on x.pk = y.pk and x.pk = y.a and x.a = y.pk where y.pk = 2; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE y const PRIMARY PRIMARY 4 const 1 100.00 1 SIMPLE x const PRIMARY,a PRIMARY 4 const 1 100.00 Using where Warnings: Note 9999 Can't push table 'x' as child of 'y', their dependency is 'const' Note 1003 /* select#1 */ select `test`.`x`.`pk` AS `pk`,`test`.`x`.`a` AS `a`,`test`.`y`.`pk` AS `pk`,`test`.`y`.`a` AS `a` from `test`.`t1` `y` left join `test`.`t1` `x` on(((`test`.`y`.`a` = 2) and (`test`.`x`.`pk` = 2) and (`test`.`x`.`a` = 2))) where (`test`.`y`.`pk` = 2) select * from t1 as x right join t1 as y on x.pk = y.pk and x.pk = y.a and x.a = y.pk where y.pk = 2; pk a pk a NULL NULL 2 20 drop table t1; create table t1 (pk int primary key, u int not null, a int, b int) engine=ndb; create index ix1 on t1(b,a); insert into t1 values (0,1,10,20); insert into t1 values (1,2,20,30); insert into t1 values (2,3,30,40); explain extended select * from t1 as x join t1 as y join t1 as z on x.u=y.pk and y.a=z.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL NULL NULL NULL NULL 3 100.00 Parent of 3 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 4 test.x.u 1 100.00 Child of 'x' in pushed join@1; Using where with pushed condition: (`test`.`y`.`a` is not null) 1 SIMPLE z ref ix1 ix1 5 test.y.a 1 100.00 Child of 'y' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`pk` AS `pk`,`test`.`x`.`u` AS `u`,`test`.`x`.`a` AS `a`,`test`.`x`.`b` AS `b`,`test`.`y`.`pk` AS `pk`,`test`.`y`.`u` AS `u`,`test`.`y`.`a` AS `a`,`test`.`y`.`b` AS `b`,`test`.`z`.`pk` AS `pk`,`test`.`z`.`u` AS `u`,`test`.`z`.`a` AS `a`,`test`.`z`.`b` AS `b` from `test`.`t1` `x` join `test`.`t1` `y` join `test`.`t1` `z` where ((`test`.`z`.`b` = `test`.`y`.`a`) and (`test`.`y`.`pk` = `test`.`x`.`u`)) select * from t1 as x join t1 as y join t1 as z on x.u=y.pk and y.a=z.b; pk u a b pk u a b pk u a b 0 1 10 20 1 2 20 30 0 1 10 20 1 2 20 30 2 3 30 40 1 2 20 30 drop table t1; create table t1 (pk int primary key, u int not null) engine=ndb; insert into t1 values (0,-1), (1,-1), (2,-1), (3,-1), (4,-1), (5,-1), (6,-1), (7,-1), (8,-1), (9,-1), (10,-1), (11,-1), (12,-1), (13,-1), (14,-1), (15,-1), (16,-1), (17,-1), (18,-1), (19,-1), (20,-1), (21,-1), (22,-1), (23,-1), (24,-1), (25,-1), (26,-1), (27,-1), (28,-1), (29,-1), (30,-1), (31,-1), (32,-1), (33,-1), (34,-1), (35,-1), (36,-1), (37,-1), (38,-1), (39,-1), (40,-1), (41,-1), (42,-1), (43,-1), (44,-1), (45,-1), (46,-1), (47,-1), (48,-1), (49,-1), (50,-1), (51,-1), (52,-1), (53,-1), (54,-1), (55,-1), (56,-1), (57,-1), (58,-1), (59,-1), (60,-1), (61,-1), (62,-1), (63,-1), (64,-1), (65,-1), (66,-1), (67,-1), (68,-1), (69,-1), (70,-1), (71,-1), (72,-1), (73,-1), (74,-1), (75,-1), (76,-1), (77,-1), (78,-1), (79,-1), (80,-1), (81,-1), (82,-1), (83,-1), (84,-1), (85,-1), (86,-1), (87,-1), (88,-1), (89,-1), (90,-1), (91,-1), (92,-1), (93,-1), (94,-1), (95,-1), (96,-1), (97,-1), (98,-1), (99,-1), (100,-1), (101,-1), (102,-1), (103,-1), (104,-1), (105,-1), (106,-1), (107,-1), (108,-1), (109,-1), (110,-1), (111,-1), (112,-1), (113,-1), (114,-1), (115,-1), (116,-1), (117,-1), (118,-1), (119,-1), (120,-1), (121,-1), (122,-1), (123,-1), (124,-1), (125,-1), (126,-1), (127,-1), (128,-1), (129,-1), (130,-1), (131,-1), (132,-1), (133,-1), (134,-1), (135,-1), (136,-1), (137,-1), (138,-1), (139,-1); explain extended select * from t1 as x join t1 as y on x.u=y.pk order by(x.pk); id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x index NULL PRIMARY 4 NULL 140 100.00 Parent of 2 pushed join@1 1 SIMPLE y eq_ref PRIMARY PRIMARY 4 test.x.u 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x`.`pk` AS `pk`,`test`.`x`.`u` AS `u`,`test`.`y`.`pk` AS `pk`,`test`.`y`.`u` AS `u` from `test`.`t1` `x` join `test`.`t1` `y` where (`test`.`y`.`pk` = `test`.`x`.`u`) order by `test`.`x`.`pk` select * from t1 as x join t1 as y on x.u=y.pk order by(x.pk); pk u pk u drop table t1; create table t1 (pk int primary key, u int not null, a int, b int) engine=ndb; create index ix1 on t1(b,a); create unique index ix2 on t1(u); insert into t1 values (0,0,10,10); insert into t1 values (1,1,10,10); insert into t1 values (2,2,10,10); insert into t1 values (3,3,10,10); insert into t1 values (4,4,10,10); insert into t1 values (5,5,10,10); insert into t1 values (6,6,10,10); insert into t1 values (7,7,10,10); insert into t1 values (8,8,10,10); insert into t1 values (9,9,10,10); insert into t1 values (10,10,10,10); insert into t1 values (11,11,10,10); explain extended select count(*) from t1 as x1 join t1 as x2 join t1 as x3 on x1.a=x2.u and x2.a = x3.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL NULL NULL NULL NULL 12 100.00 Parent of 3 pushed join@1; Using where with pushed condition: (`test`.`x1`.`a` is not null) 1 SIMPLE x2 eq_ref ix2 ix2 4 test.x1.a 1 100.00 Child of 'x1' in pushed join@1; Using where with pushed condition: (`test`.`x2`.`a` is not null) 1 SIMPLE x3 ref ix1 ix1 5 test.x2.a 2 100.00 Child of 'x2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` `x1` join `test`.`t1` `x2` join `test`.`t1` `x3` where ((`test`.`x3`.`b` = `test`.`x2`.`a`) and (`test`.`x2`.`u` = `test`.`x1`.`a`)) select count(*) from t1 as x1 join t1 as x2 join t1 as x3 on x1.a=x2.u and x2.a = x3.b; count(*) 144 explain extended select count(*) from t1 as x1, t1 as x2, t1 as x3 where x1.u=x2.pk and x1.a=x3.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL ix2 NULL NULL NULL 12 100.00 Parent of 3 pushed join@1; Using where with pushed condition: (`test`.`x1`.`a` is not null) 1 SIMPLE x2 eq_ref PRIMARY PRIMARY 4 test.x1.u 1 100.00 Child of 'x1' in pushed join@1 1 SIMPLE x3 ref ix1 ix1 5 test.x1.a 2 100.00 Child of 'x1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` `x1` join `test`.`t1` `x2` join `test`.`t1` `x3` where ((`test`.`x3`.`b` = `test`.`x1`.`a`) and (`test`.`x2`.`pk` = `test`.`x1`.`u`)) select count(*) from t1 as x1, t1 as x2, t1 as x3 where x1.u=x2.pk and x1.a=x3.b; count(*) 144 insert into t1 values (12,12,20,10); explain extended select count(*) from t1 as x1 left join t1 as x2 on x1.a=x2.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL NULL NULL NULL NULL 13 100.00 1 SIMPLE x2 ref ix1 ix1 5 test.x1.a 2 100.00 Warnings: Note 9999 Can't push table 'x2' as child of 'x1', outer join of scan-child not implemented Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` `x1` left join `test`.`t1` `x2` on((`test`.`x1`.`a` = `test`.`x2`.`b`)) where 1 select count(*) from t1 as x1 left join t1 as x2 on x1.a=x2.b; count(*) 157 set ndb_join_pushdown=off; select count(*) from t1 as x1 left join t1 as x2 on x1.a=x2.b; count(*) 157 set ndb_join_pushdown=on; explain extended select count(*) from t1 as x1 left join t1 as x2 on x1.u=x2.pk left join t1 as x3 on x2.a=x3.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL NULL NULL NULL NULL 13 100.00 Parent of 2 pushed join@1 1 SIMPLE x2 eq_ref PRIMARY PRIMARY 4 test.x1.u 1 100.00 Child of 'x1' in pushed join@1 1 SIMPLE x3 ref ix1 ix1 5 test.x2.a 2 100.00 Warnings: Note 9999 Can't push table 'x3' as child of 'x1', outer join of scan-child not implemented Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` `x1` left join `test`.`t1` `x2` on((`test`.`x1`.`u` = `test`.`x2`.`pk`)) left join `test`.`t1` `x3` on((`test`.`x2`.`a` = `test`.`x3`.`b`)) where 1 select count(*) from t1 as x1 left join t1 as x2 on x1.u=x2.pk left join t1 as x3 on x2.a=x3.b; count(*) 157 set ndb_join_pushdown=off; select count(*) from t1 as x1 left join t1 as x2 on x1.u=x2.pk left join t1 as x3 on x2.a=x3.b; count(*) 157 set ndb_join_pushdown=on; explain extended select count(*) from t1 as x1 left join t1 as x2 on x1.u=x2.pk left join t1 as x3 on x2.a=x3.b left join t1 as x4 on x3.u=x4.pk left join t1 as x5 on x4.a=x5.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL NULL NULL NULL NULL 13 100.00 Parent of 2 pushed join@1 1 SIMPLE x2 eq_ref PRIMARY PRIMARY 4 test.x1.u 1 100.00 Child of 'x1' in pushed join@1 1 SIMPLE x3 ref ix1 ix1 5 test.x2.a 2 100.00 Parent of 2 pushed join@2 1 SIMPLE x4 eq_ref PRIMARY PRIMARY 4 test.x3.u 1 100.00 Child of 'x3' in pushed join@2 1 SIMPLE x5 ref ix1 ix1 5 test.x4.a 2 100.00 Warnings: Note 9999 Can't push table 'x3' as child of 'x1', outer join of scan-child not implemented Note 9999 Can't push table 'x4' as child of 'x1', column 'x3.u' is outside scope of pushable join Note 9999 Can't push table 'x5' as child of 'x1', column 'x4.a' is outside scope of pushable join Note 9999 Can't push table 'x5' as child of 'x3', outer join of scan-child not implemented Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` `x1` left join `test`.`t1` `x2` on((`test`.`x1`.`u` = `test`.`x2`.`pk`)) left join `test`.`t1` `x3` on((`test`.`x2`.`a` = `test`.`x3`.`b`)) left join `test`.`t1` `x4` on((`test`.`x3`.`u` = `test`.`x4`.`pk`)) left join `test`.`t1` `x5` on((`test`.`x4`.`a` = `test`.`x5`.`b`)) where 1 select count(*) from t1 as x1 left join t1 as x2 on x1.u=x2.pk left join t1 as x3 on x2.a=x3.b left join t1 as x4 on x3.u=x4.pk left join t1 as x5 on x4.a=x5.b; count(*) 1885 set ndb_join_pushdown=off; select count(*) from t1 as x1 left join t1 as x2 on x1.u=x2.pk left join t1 as x3 on x2.a=x3.b left join t1 as x4 on x3.u=x4.pk left join t1 as x5 on x4.a=x5.b; count(*) 1885 set ndb_join_pushdown=on; explain extended select count(*) from t1 as x1 join t1 as x2 on x1.a=x2.b where x1.pk = 1 or x1.u=1; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 index_merge PRIMARY,ix2 ix2,PRIMARY 4,4 NULL 2 100.00 Using sort_union(ix2,PRIMARY); Using where with pushed condition: (((`test`.`x1`.`pk` = 1) or (`test`.`x1`.`u` = 1)) and (`test`.`x1`.`a` is not null)) 1 SIMPLE x2 ref ix1 ix1 5 test.x1.a 2 100.00 Warnings: Note 9999 Push of table 'x2' as scan-child with lookup-root 'x1' not implemented Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` `x1` join `test`.`t1` `x2` where ((`test`.`x2`.`b` = `test`.`x1`.`a`) and ((`test`.`x1`.`pk` = 1) or (`test`.`x1`.`u` = 1))) select count(*) from t1 as x1 join t1 as x2 on x1.a=x2.b where x1.pk = 1 or x1.u=1; count(*) 13 set ndb_join_pushdown=on; explain extended select straight_join * from t1 as table1 left join (t1 as table2 join t1 as table3 on table2.pk = table3.b) on table1.pk = table2.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE table1 ALL NULL NULL NULL NULL 13 100.00 1 SIMPLE table2 ref PRIMARY,ix1 ix1 5 test.table1.pk 2 100.00 Parent of 2 pushed join@1 1 SIMPLE table3 ref ix1 ix1 5 test.table2.pk 2 100.00 Child of 'table2' in pushed join@1 Warnings: Note 9999 Can't push table 'table2' as child of 'table1', outer join of scan-child not implemented Note 9999 Can't push table 'table3' as child of 'table1', column 'table2.pk' is outside scope of pushable join Note 1003 /* select#1 */ select straight_join `test`.`table1`.`pk` AS `pk`,`test`.`table1`.`u` AS `u`,`test`.`table1`.`a` AS `a`,`test`.`table1`.`b` AS `b`,`test`.`table2`.`pk` AS `pk`,`test`.`table2`.`u` AS `u`,`test`.`table2`.`a` AS `a`,`test`.`table2`.`b` AS `b`,`test`.`table3`.`pk` AS `pk`,`test`.`table3`.`u` AS `u`,`test`.`table3`.`a` AS `a`,`test`.`table3`.`b` AS `b` from `test`.`t1` `table1` left join (`test`.`t1` `table2` join `test`.`t1` `table3`) on(((`test`.`table1`.`pk` = `test`.`table2`.`b`) and (`test`.`table2`.`pk` = `test`.`table3`.`b`))) where 1 select straight_join * from t1 as table1 left join (t1 as table2 join t1 as table3 on table2.pk = table3.b) on table1.pk = table2.b; pk u a b pk u a b pk u a b 0 0 10 10 NULL NULL NULL NULL NULL NULL NULL NULL 1 1 10 10 NULL NULL NULL NULL NULL NULL NULL NULL 10 10 10 10 10 10 10 10 0 0 10 10 10 10 10 10 10 10 10 10 1 1 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 10 10 10 10 10 10 10 10 10 10 12 12 20 10 10 10 10 10 10 10 10 10 2 2 10 10 10 10 10 10 10 10 10 10 3 3 10 10 10 10 10 10 10 10 10 10 4 4 10 10 10 10 10 10 10 10 10 10 5 5 10 10 10 10 10 10 10 10 10 10 6 6 10 10 10 10 10 10 10 10 10 10 7 7 10 10 10 10 10 10 10 10 10 10 8 8 10 10 10 10 10 10 10 10 10 10 9 9 10 10 11 11 10 10 NULL NULL NULL NULL NULL NULL NULL NULL 12 12 20 10 NULL NULL NULL NULL NULL NULL NULL NULL 2 2 10 10 NULL NULL NULL NULL NULL NULL NULL NULL 3 3 10 10 NULL NULL NULL NULL NULL NULL NULL NULL 4 4 10 10 NULL NULL NULL NULL NULL NULL NULL NULL 5 5 10 10 NULL NULL NULL NULL NULL NULL NULL NULL 6 6 10 10 NULL NULL NULL NULL NULL NULL NULL NULL 7 7 10 10 NULL NULL NULL NULL NULL NULL NULL NULL 8 8 10 10 NULL NULL NULL NULL NULL NULL NULL NULL 9 9 10 10 NULL NULL NULL NULL NULL NULL NULL NULL explain extended select straight_join * from t1 as x1 inner join t1 as x2 on x2.b = x1.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL NULL NULL NULL NULL 13 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x1`.`a` is not null) 1 SIMPLE x2 ref ix1 ix1 5 test.x1.a 2 100.00 Child of 'x1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`x1`.`pk` AS `pk`,`test`.`x1`.`u` AS `u`,`test`.`x1`.`a` AS `a`,`test`.`x1`.`b` AS `b`,`test`.`x2`.`pk` AS `pk`,`test`.`x2`.`u` AS `u`,`test`.`x2`.`a` AS `a`,`test`.`x2`.`b` AS `b` from `test`.`t1` `x1` join `test`.`t1` `x2` where (`test`.`x2`.`b` = `test`.`x1`.`a`) explain extended select straight_join * from t1 as x1 left join t1 as x2 on x2.b = x1.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL NULL NULL NULL NULL 13 100.00 1 SIMPLE x2 ref ix1 ix1 5 test.x1.a 2 100.00 Warnings: Note 9999 Can't push table 'x2' as child of 'x1', outer join of scan-child not implemented Note 1003 /* select#1 */ select straight_join `test`.`x1`.`pk` AS `pk`,`test`.`x1`.`u` AS `u`,`test`.`x1`.`a` AS `a`,`test`.`x1`.`b` AS `b`,`test`.`x2`.`pk` AS `pk`,`test`.`x2`.`u` AS `u`,`test`.`x2`.`a` AS `a`,`test`.`x2`.`b` AS `b` from `test`.`t1` `x1` left join `test`.`t1` `x2` on((`test`.`x2`.`b` = `test`.`x1`.`a`)) where 1 explain extended select straight_join * from t1 as x1 right join t1 as x2 on x2.b = x1.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x2 ALL NULL NULL NULL NULL 13 100.00 1 SIMPLE x1 ALL NULL NULL NULL NULL 13 100.00 Using where; Using join buffer (Block Nested Loop) Warnings: Note 9999 Can't push table 'x1' as child, 'type' must be a 'ref' access Note 1003 /* select#1 */ select straight_join `test`.`x1`.`pk` AS `pk`,`test`.`x1`.`u` AS `u`,`test`.`x1`.`a` AS `a`,`test`.`x1`.`b` AS `b`,`test`.`x2`.`pk` AS `pk`,`test`.`x2`.`u` AS `u`,`test`.`x2`.`a` AS `a`,`test`.`x2`.`b` AS `b` from `test`.`t1` `x2` left join `test`.`t1` `x1` on((`test`.`x2`.`b` = `test`.`x1`.`a`)) where 1 explain extended select straight_join * from t1 as x1 inner join (t1 as x2 inner join t1 as x3 on x3.b = x2.a) on x2.pk = x1.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL NULL NULL NULL NULL 13 100.00 Parent of 3 pushed join@1; Using where with pushed condition: (`test`.`x1`.`a` is not null) 1 SIMPLE x2 eq_ref PRIMARY PRIMARY 4 test.x1.a 1 100.00 Child of 'x1' in pushed join@1; Using where with pushed condition: (`test`.`x2`.`a` is not null) 1 SIMPLE x3 ref ix1 ix1 5 test.x2.a 2 100.00 Child of 'x2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`x1`.`pk` AS `pk`,`test`.`x1`.`u` AS `u`,`test`.`x1`.`a` AS `a`,`test`.`x1`.`b` AS `b`,`test`.`x2`.`pk` AS `pk`,`test`.`x2`.`u` AS `u`,`test`.`x2`.`a` AS `a`,`test`.`x2`.`b` AS `b`,`test`.`x3`.`pk` AS `pk`,`test`.`x3`.`u` AS `u`,`test`.`x3`.`a` AS `a`,`test`.`x3`.`b` AS `b` from `test`.`t1` `x1` join `test`.`t1` `x2` join `test`.`t1` `x3` where ((`test`.`x3`.`b` = `test`.`x2`.`a`) and (`test`.`x2`.`pk` = `test`.`x1`.`a`)) explain extended select straight_join * from t1 as x1 left join (t1 as x2 inner join t1 as x3 on x3.b = x2.a) on x2.pk = x1.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL NULL NULL NULL NULL 13 100.00 Parent of 2 pushed join@1 1 SIMPLE x2 eq_ref PRIMARY PRIMARY 4 test.x1.a 1 100.00 Child of 'x1' in pushed join@1 1 SIMPLE x3 ref ix1 ix1 5 test.x2.a 2 100.00 Warnings: Note 9999 Can't push table 'x3' as child of 'x1', outer join of scan-child not implemented Note 1003 /* select#1 */ select straight_join `test`.`x1`.`pk` AS `pk`,`test`.`x1`.`u` AS `u`,`test`.`x1`.`a` AS `a`,`test`.`x1`.`b` AS `b`,`test`.`x2`.`pk` AS `pk`,`test`.`x2`.`u` AS `u`,`test`.`x2`.`a` AS `a`,`test`.`x2`.`b` AS `b`,`test`.`x3`.`pk` AS `pk`,`test`.`x3`.`u` AS `u`,`test`.`x3`.`a` AS `a`,`test`.`x3`.`b` AS `b` from `test`.`t1` `x1` left join (`test`.`t1` `x2` join `test`.`t1` `x3`) on(((`test`.`x2`.`pk` = `test`.`x1`.`a`) and (`test`.`x3`.`b` = `test`.`x2`.`a`))) where 1 update spj_save_counts set val = (select sum(val) from ndbinfo.counters where block_name='DBSPJ' and counter_name='SCAN_ROWS_RETURNED') where counter_name='SCAN_ROWS_RETURNED'; explain extended select straight_join count(*) from t1 as x1 join t1 as x2 on x2.b = x1.a join t1 as x3 on x3.b = x1.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL ix1 NULL NULL NULL 13 100.00 Parent of 3 pushed join@1; Using where with pushed condition: ((`test`.`x1`.`a` is not null) and (`test`.`x1`.`b` is not null)) 1 SIMPLE x2 ref ix1 ix1 5 test.x1.a 2 100.00 Child of 'x1' in pushed join@1 1 SIMPLE x3 ref ix1 ix1 5 test.x1.b 2 100.00 Child of 'x1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join count(0) AS `count(*)` from `test`.`t1` `x1` join `test`.`t1` `x2` join `test`.`t1` `x3` where ((`test`.`x2`.`b` = `test`.`x1`.`a`) and (`test`.`x3`.`b` = `test`.`x1`.`b`)) set ndb_join_pushdown=off; select straight_join count(*) from t1 as x1 join t1 as x2 on x2.b = x1.a join t1 as x3 on x3.b = x1.b; count(*) 2028 set ndb_join_pushdown=on; select straight_join count(*) from t1 as x1 join t1 as x2 on x2.b = x1.a join t1 as x3 on x3.b = x1.b; count(*) 2028 explain extended select straight_join count(*) from t1 as x1 join t1 as x2 on x2.b = x1.a join t1 as x3 on x3.b = x1.a join t1 as x4 on x4.b = x1.a join t1 as x5 on x5.b = x1.a join t1 as x6 on x6.b = x1.a join t1 as x7 on x7.b = x1.a where x3.a < x2.pk and x4.a < x3.pk; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL NULL NULL NULL NULL 13 100.00 Parent of 7 pushed join@1; Using where with pushed condition: ((`test`.`x1`.`a` is not null) and (`test`.`x1`.`a` is not null)) 1 SIMPLE x2 ref PRIMARY,ix1 ix1 5 test.x1.a 2 100.00 Child of 'x1' in pushed join@1; Using where with pushed condition: ((((`test`.`x2`.`b` is not null) and (`test`.`x2`.`b` is not null)) and (`test`.`x2`.`b` is not null)) and (`test`.`x2`.`b` is not null)) 1 SIMPLE x3 ref PRIMARY,ix1 ix1 5 test.x2.b 2 100.00 Child of 'x1' in pushed join@1; Using where 1 SIMPLE x4 ref ix1 ix1 5 test.x2.b 2 100.00 Child of 'x1' in pushed join@1; Using where 1 SIMPLE x5 ref ix1 ix1 5 test.x2.b 2 100.00 Child of 'x1' in pushed join@1; Using where 1 SIMPLE x6 ref ix1 ix1 5 test.x1.a 2 100.00 Child of 'x1' in pushed join@1 1 SIMPLE x7 ref ix1 ix1 5 test.x2.b 2 100.00 Child of 'x1' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select straight_join count(0) AS `count(*)` from `test`.`t1` `x1` join `test`.`t1` `x2` join `test`.`t1` `x3` join `test`.`t1` `x4` join `test`.`t1` `x5` join `test`.`t1` `x6` join `test`.`t1` `x7` where ((`test`.`x2`.`b` = `test`.`x1`.`a`) and (`test`.`x3`.`b` = `test`.`x1`.`a`) and (`test`.`x4`.`b` = `test`.`x1`.`a`) and (`test`.`x5`.`b` = `test`.`x1`.`a`) and (`test`.`x6`.`b` = `test`.`x1`.`a`) and (`test`.`x7`.`b` = `test`.`x1`.`a`) and (`test`.`x3`.`a` < `test`.`x2`.`pk`) and (`test`.`x4`.`a` < `test`.`x3`.`pk`)) select straight_join count(*) from t1 as x1 join t1 as x2 on x2.b = x1.a join t1 as x3 on x3.b = x1.a join t1 as x4 on x4.b = x1.a join t1 as x5 on x5.b = x1.a join t1 as x6 on x6.b = x1.a join t1 as x7 on x7.b = x1.a where x3.a < x2.pk and x4.a < x3.pk; count(*) 632736 update spj_counts_at_startup set val = val + (select sum(val) from ndbinfo.counters where block_name='DBSPJ' and counter_name='SCAN_ROWS_RETURNED') - (select val from spj_save_counts where counter_name='SCAN_ROWS_RETURNED') where counter_name='SCAN_ROWS_RETURNED'; explain extended select straight_join count(*) from t1 as x1 left join t1 as x2 on x2.b = x1.a join t1 as x3 on x3.b = x1.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL ix1 NULL NULL NULL 13 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x1`.`b` is not null) 1 SIMPLE x2 ref ix1 ix1 5 test.x1.a 2 100.00 1 SIMPLE x3 ref ix1 ix1 5 test.x1.b 2 100.00 Child of 'x1' in pushed join@1 Warnings: Note 9999 Can't push table 'x2' as child of 'x1', outer join of scan-child not implemented Note 1003 /* select#1 */ select straight_join count(0) AS `count(*)` from `test`.`t1` `x1` left join `test`.`t1` `x2` on((`test`.`x2`.`b` = `test`.`x1`.`a`)) join `test`.`t1` `x3` where (`test`.`x3`.`b` = `test`.`x1`.`b`) set ndb_join_pushdown=off; select straight_join count(*) from t1 as x1 left join t1 as x2 on x2.b = x1.a join t1 as x3 on x3.b = x1.b; count(*) 2041 set ndb_join_pushdown=on; select straight_join count(*) from t1 as x1 left join t1 as x2 on x2.b = x1.a join t1 as x3 on x3.b = x1.b; count(*) 2041 explain extended select straight_join count(*) from t1 as x1 join t1 as x2 on x2.b = x1.a left join t1 as x3 on x3.b = x1.b; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL NULL NULL NULL NULL 13 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x1`.`a` is not null) 1 SIMPLE x2 ref ix1 ix1 5 test.x1.a 2 100.00 Child of 'x1' in pushed join@1 1 SIMPLE x3 ref ix1 ix1 5 test.x1.b 2 100.00 Warnings: Note 9999 Can't push table 'x3' as child of 'x1', outer join of scan-child not implemented Note 1003 /* select#1 */ select straight_join count(0) AS `count(*)` from `test`.`t1` `x1` join `test`.`t1` `x2` left join `test`.`t1` `x3` on((`test`.`x3`.`b` = `test`.`x1`.`b`)) where (`test`.`x2`.`b` = `test`.`x1`.`a`) set ndb_join_pushdown=off; select straight_join count(*) from t1 as x1 join t1 as x2 on x2.b = x1.a left join t1 as x3 on x3.b = x1.b; count(*) 2028 set ndb_join_pushdown=on; select straight_join count(*) from t1 as x1 join t1 as x2 on x2.b = x1.a left join t1 as x3 on x3.b = x1.b; count(*) 2028 update spj_save_counts set val = (select sum(val) from ndbinfo.counters where block_name='DBSPJ' and counter_name='SCAN_ROWS_RETURNED') where counter_name='SCAN_ROWS_RETURNED'; explain extended select straight_join count(*) from t1 as x1 join t1 as x2 on x2.b = x1.a join t1 as x3 on x3.pk = x1.a join t1 as x4 on x4.b = x3.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL NULL NULL NULL NULL 13 100.00 Parent of 4 pushed join@1; Using where with pushed condition: ((`test`.`x1`.`a` is not null) and (`test`.`x1`.`a` is not null)) 1 SIMPLE x2 ref ix1 ix1 5 test.x1.a 2 100.00 Child of 'x1' in pushed join@1 1 SIMPLE x3 eq_ref PRIMARY PRIMARY 4 test.x1.a 1 100.00 Child of 'x1' in pushed join@1; Using where with pushed condition: (`test`.`x3`.`a` is not null) 1 SIMPLE x4 ref ix1 ix1 5 test.x3.a 2 100.00 Child of 'x3' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join count(0) AS `count(*)` from `test`.`t1` `x1` join `test`.`t1` `x2` join `test`.`t1` `x3` join `test`.`t1` `x4` where ((`test`.`x2`.`b` = `test`.`x1`.`a`) and (`test`.`x3`.`pk` = `test`.`x1`.`a`) and (`test`.`x4`.`b` = `test`.`x3`.`a`)) set ndb_join_pushdown=off; select straight_join count(*) from t1 as x1 join t1 as x2 on x2.b = x1.a join t1 as x3 on x3.pk = x1.a join t1 as x4 on x4.b = x3.a; count(*) 2028 set ndb_join_pushdown=on; select straight_join count(*) from t1 as x1 join t1 as x2 on x2.b = x1.a join t1 as x3 on x3.pk = x1.a join t1 as x4 on x4.b = x3.a; count(*) 2028 update spj_counts_at_startup set val = val + (select sum(val) from ndbinfo.counters where block_name='DBSPJ' and counter_name='SCAN_ROWS_RETURNED') - (select val from spj_save_counts where counter_name='SCAN_ROWS_RETURNED') where counter_name='SCAN_ROWS_RETURNED'; explain extended select straight_join count(*) from t1 as x1 left join t1 as x3 on x3.b = x1.a join t1 as x2 on x2.pk = x1.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL NULL NULL NULL NULL 13 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x1`.`a` is not null) 1 SIMPLE x3 ref ix1 ix1 5 test.x1.a 2 100.00 1 SIMPLE x2 eq_ref PRIMARY PRIMARY 4 test.x1.a 1 100.00 Child of 'x1' in pushed join@1 Warnings: Note 9999 Can't push table 'x3' as child of 'x1', outer join of scan-child not implemented Note 1003 /* select#1 */ select straight_join count(0) AS `count(*)` from `test`.`t1` `x1` left join `test`.`t1` `x3` on(((`test`.`x3`.`b` = `test`.`x1`.`a`) and (`test`.`x2`.`pk` = `test`.`x1`.`a`))) join `test`.`t1` `x2` where (`test`.`x2`.`pk` = `test`.`x1`.`a`) select straight_join count(*) from t1 as x1 left join t1 as x3 on x3.b = x1.a join t1 as x2 on x2.pk = x1.a; count(*) 156 update t1 set b=b+10; select straight_join count(*) from t1 as x1 left join t1 as x3 on x3.b = x1.a join t1 as x2 on x2.pk = x1.a; count(*) 12 update t1 set b=b-10; update t1 set u=u+100; set ndb_join_pushdown=on; explain extended select straight_join count(*) from (t1 as x join t1 as y on y.b = x.a) left outer join t1 as z on z.u = x.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL NULL NULL NULL NULL 13 100.00 Parent of 3 pushed join@1; Using where with pushed condition: (`test`.`x`.`a` is not null) 1 SIMPLE y ref ix1 ix1 5 test.x.a 2 100.00 Child of 'x' in pushed join@1 1 SIMPLE z eq_ref ix2 ix2 4 test.y.b 1 100.00 Child of 'x' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select straight_join count(0) AS `count(*)` from `test`.`t1` `x` join `test`.`t1` `y` left join `test`.`t1` `z` on(((`test`.`y`.`b` = `test`.`x`.`a`) and (`test`.`z`.`u` = `test`.`x`.`a`))) where (`test`.`y`.`b` = `test`.`x`.`a`) select straight_join count(*) from (t1 as x join t1 as y on y.b = x.a) left outer join t1 as z on z.u = x.a; count(*) 156 update t1 set u=u-100; drop index ix2 on t1; create unique index ix2 on t1(a,u); set ndb_join_pushdown=on; explain extended select straight_join * from t1 as table1 join (t1 as table2 join t1 as table3 on table3.a = table2.a) on table3.u = table1.u where table2.pk = 3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE table1 ALL NULL NULL NULL NULL 13 100.00 1 SIMPLE table2 const PRIMARY,ix2 PRIMARY 4 const 1 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`table2`.`a` is not null) 1 SIMPLE table3 ref ix2 ix2 9 test.table2.a,test.table1.u 1 100.00 Child of 'table2' in pushed join@1 Warnings: Note 9999 Can't push table 'table2' as child of 'table1', their dependency is 'const' Note 9999 Can't push table 'table3' as child of 'table1', column 'table2.a' is outside scope of pushable join Note 1003 /* select#1 */ select straight_join `test`.`table1`.`pk` AS `pk`,`test`.`table1`.`u` AS `u`,`test`.`table1`.`a` AS `a`,`test`.`table1`.`b` AS `b`,`test`.`table2`.`pk` AS `pk`,`test`.`table2`.`u` AS `u`,`test`.`table2`.`a` AS `a`,`test`.`table2`.`b` AS `b`,`test`.`table3`.`pk` AS `pk`,`test`.`table3`.`u` AS `u`,`test`.`table3`.`a` AS `a`,`test`.`table3`.`b` AS `b` from `test`.`t1` `table1` join `test`.`t1` `table2` join `test`.`t1` `table3` where ((`test`.`table3`.`a` = `test`.`table2`.`a`) and (`test`.`table3`.`u` = `test`.`table1`.`u`) and (`test`.`table2`.`pk` = 3)) select straight_join * from t1 as table1 join (t1 as table2 join t1 as table3 on table3.a = table2.a) on table3.u = table1.u where table2.pk = 3; pk u a b pk u a b pk u a b 0 0 10 10 3 3 10 10 0 0 10 10 1 1 10 10 3 3 10 10 1 1 10 10 10 10 10 10 3 3 10 10 10 10 10 10 11 11 10 10 3 3 10 10 11 11 10 10 2 2 10 10 3 3 10 10 2 2 10 10 3 3 10 10 3 3 10 10 3 3 10 10 4 4 10 10 3 3 10 10 4 4 10 10 5 5 10 10 3 3 10 10 5 5 10 10 6 6 10 10 3 3 10 10 6 6 10 10 7 7 10 10 3 3 10 10 7 7 10 10 8 8 10 10 3 3 10 10 8 8 10 10 9 9 10 10 3 3 10 10 9 9 10 10 drop table t1; CREATE TABLE t1 ( a int NOT NULL, b int NOT NULL, c int NOT NULL, d int NOT NULL, PRIMARY KEY (`a`,`b`) ) ENGINE=ndbcluster; insert into t1 values (1,1,1,1), (1,2,1,1), (1,3,1,1), (1,4,1,2); CREATE TABLE t2 ( a int NOT NULL, PRIMARY KEY (`a`) ) ENGINE=ndbcluster; CREATE TABLE t3 ( a int NOT NULL, b int NOT NULL, PRIMARY KEY (`a`,`b`) ) ENGINE=ndbcluster; insert into t2 values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9); insert into t3 select 1, x1.a * 10+x2.a from t2 as x1 cross join t2 as x2; explain select straight_join count(*) from t1 as x0 join t3 as x1 on x0.c=x1.a join t1 as x2 on x0.c=x2.a join t3 as x3 on x2.c=x3.a join t1 as x4 on x0.d=x4.a and x3.b=x4.b; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE x0 ALL NULL NULL NULL NULL 4 Parent of 5 pushed join@1 1 SIMPLE x1 ref PRIMARY PRIMARY 4 test.x0.c 1 Child of 'x0' in pushed join@1 1 SIMPLE x2 ref PRIMARY PRIMARY 4 test.x0.c 1 Child of 'x0' in pushed join@1 1 SIMPLE x3 ref PRIMARY PRIMARY 4 test.x2.c 1 Child of 'x2' in pushed join@1 1 SIMPLE x4 eq_ref PRIMARY PRIMARY 8 test.x0.d,test.x3.b 1 Child of 'x3' in pushed join@1 update spj_save_counts set val = (select sum(val) from ndbinfo.counters where block_name='DBSPJ' and counter_name='SCAN_ROWS_RETURNED') where counter_name='SCAN_ROWS_RETURNED'; select straight_join count(*) from t1 as x0 join t3 as x1 on x0.c=x1.a join t1 as x2 on x0.c=x2.a join t3 as x3 on x2.c=x3.a join t1 as x4 on x0.d=x4.a and x3.b=x4.b; count(*) 4800 update spj_counts_at_startup set val = val + (select sum(val) from ndbinfo.counters where block_name='DBSPJ' and counter_name='SCAN_ROWS_RETURNED') - (select val from spj_save_counts where counter_name='SCAN_ROWS_RETURNED') where counter_name='SCAN_ROWS_RETURNED'; drop table t1; drop table t2; drop table t3; create table t1( d int not null, e int null, f int null, a int not null, b int not null, c int not null, primary key (a,b,c)) engine = ndb partition by key (b); insert into t1(a,b,c,d,e,f) values (1, 2, 3, 1, 2, 3), (1, 2, 4, 1, 2, 3), (2, 3, 4, 1, 2, 3), (3, 4, 5, 1, 2, 3), (4, 5, 6, 1, 2, 3), (5, 6, 7, 1, 2, 3), (6, 7, 8, 1, 2, 3), (7, 8, 9, 1, 2, 3); set ndb_join_pushdown=on; explain extended select straight_join * from t1 x, t1 y where y.a=x.d and y.b=x.e; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL NULL NULL NULL NULL 8 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x`.`e` is not null) 1 SIMPLE y ref PRIMARY PRIMARY 8 test.x.d,test.x.e 1 100.00 Child of 'x' in pushed join@1 Warnings: Note 1003 /* select#1 */ select straight_join `test`.`x`.`d` AS `d`,`test`.`x`.`e` AS `e`,`test`.`x`.`f` AS `f`,`test`.`x`.`a` AS `a`,`test`.`x`.`b` AS `b`,`test`.`x`.`c` AS `c`,`test`.`y`.`d` AS `d`,`test`.`y`.`e` AS `e`,`test`.`y`.`f` AS `f`,`test`.`y`.`a` AS `a`,`test`.`y`.`b` AS `b`,`test`.`y`.`c` AS `c` from `test`.`t1` `x` join `test`.`t1` `y` where ((`test`.`y`.`b` = `test`.`x`.`e`) and (`test`.`y`.`a` = `test`.`x`.`d`)) select straight_join * from t1 x, t1 y where y.a=x.d and y.b=x.e; d e f a b c d e f a b c 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3 1 2 3 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3 2 3 4 1 2 3 1 2 3 1 2 3 2 3 4 1 2 3 1 2 4 1 2 3 3 4 5 1 2 3 1 2 3 1 2 3 3 4 5 1 2 3 1 2 4 1 2 3 4 5 6 1 2 3 1 2 3 1 2 3 4 5 6 1 2 3 1 2 4 1 2 3 5 6 7 1 2 3 1 2 3 1 2 3 5 6 7 1 2 3 1 2 4 1 2 3 6 7 8 1 2 3 1 2 3 1 2 3 6 7 8 1 2 3 1 2 4 1 2 3 7 8 9 1 2 3 1 2 3 1 2 3 7 8 9 1 2 3 1 2 4 alter table t1 partition by key (a); select straight_join * from t1 x, t1 y where y.a=x.d and y.b=x.e; d e f a b c d e f a b c 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3 1 2 3 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3 2 3 4 1 2 3 1 2 3 1 2 3 2 3 4 1 2 3 1 2 4 1 2 3 3 4 5 1 2 3 1 2 3 1 2 3 3 4 5 1 2 3 1 2 4 1 2 3 4 5 6 1 2 3 1 2 3 1 2 3 4 5 6 1 2 3 1 2 4 1 2 3 5 6 7 1 2 3 1 2 3 1 2 3 5 6 7 1 2 3 1 2 4 1 2 3 6 7 8 1 2 3 1 2 3 1 2 3 6 7 8 1 2 3 1 2 4 1 2 3 7 8 9 1 2 3 1 2 3 1 2 3 7 8 9 1 2 3 1 2 4 alter table t1 partition by key (a,b); select straight_join * from t1 x, t1 y where y.a=x.d and y.b=x.e; d e f a b c d e f a b c 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3 1 2 3 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3 2 3 4 1 2 3 1 2 3 1 2 3 2 3 4 1 2 3 1 2 4 1 2 3 3 4 5 1 2 3 1 2 3 1 2 3 3 4 5 1 2 3 1 2 4 1 2 3 4 5 6 1 2 3 1 2 3 1 2 3 4 5 6 1 2 3 1 2 4 1 2 3 5 6 7 1 2 3 1 2 3 1 2 3 5 6 7 1 2 3 1 2 4 1 2 3 6 7 8 1 2 3 1 2 3 1 2 3 6 7 8 1 2 3 1 2 4 1 2 3 7 8 9 1 2 3 1 2 3 1 2 3 7 8 9 1 2 3 1 2 4 alter table t1 partition by key (b,a); select straight_join * from t1 x, t1 y where y.a=x.d and y.b=x.e; d e f a b c d e f a b c 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3 1 2 3 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3 2 3 4 1 2 3 1 2 3 1 2 3 2 3 4 1 2 3 1 2 4 1 2 3 3 4 5 1 2 3 1 2 3 1 2 3 3 4 5 1 2 3 1 2 4 1 2 3 4 5 6 1 2 3 1 2 3 1 2 3 4 5 6 1 2 3 1 2 4 1 2 3 5 6 7 1 2 3 1 2 3 1 2 3 5 6 7 1 2 3 1 2 4 1 2 3 6 7 8 1 2 3 1 2 3 1 2 3 6 7 8 1 2 3 1 2 4 1 2 3 7 8 9 1 2 3 1 2 3 1 2 3 7 8 9 1 2 3 1 2 4 alter table t1 partition by key (b); select straight_join * from t1 x, t1 y where y.a=x.d and y.b=2; d e f a b c d e f a b c 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3 1 2 3 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3 2 3 4 1 2 3 1 2 3 1 2 3 2 3 4 1 2 3 1 2 4 1 2 3 3 4 5 1 2 3 1 2 3 1 2 3 3 4 5 1 2 3 1 2 4 1 2 3 4 5 6 1 2 3 1 2 3 1 2 3 4 5 6 1 2 3 1 2 4 1 2 3 5 6 7 1 2 3 1 2 3 1 2 3 5 6 7 1 2 3 1 2 4 1 2 3 6 7 8 1 2 3 1 2 3 1 2 3 6 7 8 1 2 3 1 2 4 1 2 3 7 8 9 1 2 3 1 2 3 1 2 3 7 8 9 1 2 3 1 2 4 alter table t1 partition by key (a); select straight_join * from t1 x, t1 y where y.a=1 and y.b=x.e; d e f a b c d e f a b c 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3 1 2 3 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3 2 3 4 1 2 3 1 2 3 1 2 3 2 3 4 1 2 3 1 2 4 1 2 3 3 4 5 1 2 3 1 2 3 1 2 3 3 4 5 1 2 3 1 2 4 1 2 3 4 5 6 1 2 3 1 2 3 1 2 3 4 5 6 1 2 3 1 2 4 1 2 3 5 6 7 1 2 3 1 2 3 1 2 3 5 6 7 1 2 3 1 2 4 1 2 3 6 7 8 1 2 3 1 2 3 1 2 3 6 7 8 1 2 3 1 2 4 1 2 3 7 8 9 1 2 3 1 2 3 1 2 3 7 8 9 1 2 3 1 2 4 select straight_join * from t1 x, t1 y where y.a=0 and y.b=x.e; d e f a b c d e f a b c alter table t1 partition by key (a,b); select straight_join * from t1 x, t1 y where y.a=1 and y.b=x.e; d e f a b c d e f a b c 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3 1 2 3 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3 2 3 4 1 2 3 1 2 3 1 2 3 2 3 4 1 2 3 1 2 4 1 2 3 3 4 5 1 2 3 1 2 3 1 2 3 3 4 5 1 2 3 1 2 4 1 2 3 4 5 6 1 2 3 1 2 3 1 2 3 4 5 6 1 2 3 1 2 4 1 2 3 5 6 7 1 2 3 1 2 3 1 2 3 5 6 7 1 2 3 1 2 4 1 2 3 6 7 8 1 2 3 1 2 3 1 2 3 6 7 8 1 2 3 1 2 4 1 2 3 7 8 9 1 2 3 1 2 3 1 2 3 7 8 9 1 2 3 1 2 4 select straight_join * from t1 x, t1 y where y.a=x.d and y.b=2; d e f a b c d e f a b c 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3 1 2 3 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3 2 3 4 1 2 3 1 2 3 1 2 3 2 3 4 1 2 3 1 2 4 1 2 3 3 4 5 1 2 3 1 2 3 1 2 3 3 4 5 1 2 3 1 2 4 1 2 3 4 5 6 1 2 3 1 2 3 1 2 3 4 5 6 1 2 3 1 2 4 1 2 3 5 6 7 1 2 3 1 2 3 1 2 3 5 6 7 1 2 3 1 2 4 1 2 3 6 7 8 1 2 3 1 2 3 1 2 3 6 7 8 1 2 3 1 2 4 1 2 3 7 8 9 1 2 3 1 2 3 1 2 3 7 8 9 1 2 3 1 2 4 alter table t1 drop primary key, add primary key using hash (d,b,a,c); alter table t1 partition by key (b); create index ix1 on t1(b,d,a); explain extended select straight_join * from t1 x, t1 y where y.a=x.d and y.b=x.e; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x ALL PRIMARY NULL NULL NULL 8 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x`.`e` is not null) 1 SIMPLE y ref ix1 ix1 4 test.x.e 1 100.00 Child of 'x' in pushed join@1; Using where Warnings: Note 1003 /* select#1 */ select straight_join `test`.`x`.`d` AS `d`,`test`.`x`.`e` AS `e`,`test`.`x`.`f` AS `f`,`test`.`x`.`a` AS `a`,`test`.`x`.`b` AS `b`,`test`.`x`.`c` AS `c`,`test`.`y`.`d` AS `d`,`test`.`y`.`e` AS `e`,`test`.`y`.`f` AS `f`,`test`.`y`.`a` AS `a`,`test`.`y`.`b` AS `b`,`test`.`y`.`c` AS `c` from `test`.`t1` `x` join `test`.`t1` `y` where ((`test`.`y`.`b` = `test`.`x`.`e`) and (`test`.`y`.`a` = `test`.`x`.`d`)) insert into t1(a,b,c,d,e,f) values (8, 9, 0, 1, null, 3), (9, 9, 0, 1, 2, null); alter table t1 partition by key (b); select straight_join * from t1 x, t1 y where y.a=x.d and y.b=x.e; d e f a b c d e f a b c 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3 1 2 3 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3 2 3 4 1 2 3 1 2 3 1 2 3 2 3 4 1 2 3 1 2 4 1 2 3 3 4 5 1 2 3 1 2 3 1 2 3 3 4 5 1 2 3 1 2 4 1 2 3 4 5 6 1 2 3 1 2 3 1 2 3 4 5 6 1 2 3 1 2 4 1 2 3 5 6 7 1 2 3 1 2 3 1 2 3 5 6 7 1 2 3 1 2 4 1 2 3 6 7 8 1 2 3 1 2 3 1 2 3 6 7 8 1 2 3 1 2 4 1 2 3 7 8 9 1 2 3 1 2 3 1 2 3 7 8 9 1 2 3 1 2 4 1 2 NULL 9 9 0 1 2 3 1 2 3 1 2 NULL 9 9 0 1 2 3 1 2 4 pruned 14 const_pruned 6 drop table t1; create table t1 (pk int primary key, a int, b int) engine=ndb; create index ix1 on t1(b,a); insert into t1 values (0,10,10); insert into t1 values (1,10,20); insert into t1 values (2,20,20); insert into t1 values (3,10,10); insert into t1 values (4,10,20); insert into t1 values (5,10,20); insert into t1 values (6,10,10); insert into t1 values (7,10,10); insert into t1 values (8,10,20); insert into t1 values (9,10,10); explain extended select x1.pk,x1.a,x1.b from t1 as x1 join t1 as x2 on x1.a=x2.b join t1 as x3 on x2.a=x3.b order by x1.pk limit 70; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 index NULL PRIMARY 4 NULL 10 100.00 Parent of 3 pushed join@1; Using where with pushed condition: (`test`.`x1`.`a` is not null); Using temporary; Using filesort 1 SIMPLE x2 ref ix1 ix1 5 test.x1.a 2 100.00 Child of 'x1' in pushed join@1; Using where with pushed condition: (`test`.`x2`.`a` is not null) 1 SIMPLE x3 ref ix1 ix1 5 test.x2.a 2 100.00 Child of 'x2' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x1`.`pk` AS `pk`,`test`.`x1`.`a` AS `a`,`test`.`x1`.`b` AS `b` from `test`.`t1` `x1` join `test`.`t1` `x2` join `test`.`t1` `x3` where ((`test`.`x2`.`b` = `test`.`x1`.`a`) and (`test`.`x3`.`b` = `test`.`x2`.`a`)) order by `test`.`x1`.`pk` limit 70 select x1.pk,x1.a,x1.b from t1 as x1 join t1 as x2 on x1.a=x2.b join t1 as x3 on x2.a=x3.b order by x1.pk limit 70; pk a b 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 0 10 10 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 1 10 20 2 20 20 2 20 20 2 20 20 2 20 20 2 20 20 2 20 20 2 20 20 2 20 20 2 20 20 2 20 20 2 20 20 2 20 20 2 20 20 2 20 20 2 20 20 2 20 20 2 20 20 2 20 20 2 20 20 2 20 20 explain extended select * from t1 as x1, t1 as x2 where x1.a=x2.b and x1.b = 3; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ref ix1 ix1 5 const 3 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x1`.`a` is not null) 1 SIMPLE x2 ref ix1 ix1 5 test.x1.a 2 100.00 Child of 'x1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x1`.`pk` AS `pk`,`test`.`x1`.`a` AS `a`,`test`.`x1`.`b` AS `b`,`test`.`x2`.`pk` AS `pk`,`test`.`x2`.`a` AS `a`,`test`.`x2`.`b` AS `b` from `test`.`t1` `x1` join `test`.`t1` `x2` where ((`test`.`x1`.`b` = 3) and (`test`.`x2`.`b` = `test`.`x1`.`a`)) select * from t1 as x1, t1 as x2 where x1.a=x2.b and x1.b = 3; pk a b pk a b drop table t1; create table t (pk int primary key, a int) engine=ndb; insert into t values (1,1), (2,1), (4,3), (6,3), (7,4), (8,4); explain extended select distinct straight_join table1.pk FROM t as table1 join (t as table2 join (t as table3 join t as table4 on table3.pk = table4.a) on table2.pk = table3.pk ) on table1.a = table4.pk where table2.pk != 6; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE table1 ALL NULL NULL NULL NULL 6 100.00 Using where with pushed condition: (`test`.`table1`.`a` is not null); Using temporary 1 SIMPLE table2 range PRIMARY PRIMARY 4 NULL 6 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`table2`.`pk` <> 6); Distinct; Using join buffer (Block Nested Loop) 1 SIMPLE table3 eq_ref PRIMARY PRIMARY 4 test.table2.pk 1 100.00 Child of 'table2' in pushed join@1; Distinct 1 SIMPLE table4 eq_ref PRIMARY PRIMARY 4 test.table1.a 1 100.00 Using where; Distinct Warnings: Note 9999 Can't push table 'table2' as child, 'type' must be a 'ref' access Note 9999 Cannot push table 'table3' as child of table 'table1'. Doing so would prevent using join buffer for table 'table2'. Note 9999 Cannot push table 'table4' as child of table 'table1'. Doing so would prevent using join buffer for table 'table2'. Note 9999 Cannot push table 'table4' as child of 'table2', since it referes to column 'table1.a' which will be stored in a join buffer. Note 1003 /* select#1 */ select straight_join distinct `test`.`table1`.`pk` AS `pk` from `test`.`t` `table1` join `test`.`t` `table2` join `test`.`t` `table3` join `test`.`t` `table4` where ((`test`.`table3`.`pk` = `test`.`table2`.`pk`) and (`test`.`table4`.`a` = `test`.`table2`.`pk`) and (`test`.`table4`.`pk` = `test`.`table1`.`a`) and (`test`.`table2`.`pk` <> 6)) select distinct straight_join table1.pk FROM t as table1 join (t as table2 join (t as table3 join t as table4 on table3.pk = table4.a) on table2.pk = table3.pk ) on table1.a = table4.pk where table2.pk != 6; pk 1 2 drop table t; create table t (b int, a int, primary key (a,b)) engine=ndb; insert into t values(0,0); explain extended select * from t as t1 join t as t2 on t2.a=t1.a where t1.a < 8 or t1.a >= 8; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 range PRIMARY PRIMARY 0 NULL 2 100.00 Parent of 2 pushed join@1; Using where with pushed condition: ((`test`.`t1`.`a` < 8) or (`test`.`t1`.`a` >= 8)) 1 SIMPLE t2 ref PRIMARY PRIMARY 4 test.t1.a 1 100.00 Child of 't1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`a` AS `a` from `test`.`t` `t1` join `test`.`t` `t2` where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and ((`test`.`t1`.`a` < 8) or (`test`.`t1`.`a` >= 8))) select * from t as t1 join t as t2 on t2.a=t1.a where t1.a < 8 or t1.a >= 8; b a b a 0 0 0 0 drop table t; create table t (pk1 int, pk2 int, primary key(pk1,pk2)) engine = ndb; insert into t values (1,3), (3,6), (6,9), (9,1); explain extended select * from t as t1 join t as t2 on t1.pk2 = t2.pk1 where t1.pk1 != 6 order by t1.pk1 DESC; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 6 66.67 Using where with pushed condition: (`test`.`t1`.`pk1` <> 6) 1 SIMPLE t2 ref PRIMARY PRIMARY 4 test.t1.pk2 1 100.00 Warnings: Note 9999 Push of table 't2' as scan-child with ordered indexscan-root 't1' not implemented Note 1003 /* select#1 */ select `test`.`t1`.`pk1` AS `pk1`,`test`.`t1`.`pk2` AS `pk2`,`test`.`t2`.`pk1` AS `pk1`,`test`.`t2`.`pk2` AS `pk2` from `test`.`t` `t1` join `test`.`t` `t2` where ((`test`.`t2`.`pk1` = `test`.`t1`.`pk2`) and (`test`.`t1`.`pk1` <> 6)) order by `test`.`t1`.`pk1` desc select * from t as t1 join t as t2 on t1.pk2 = t2.pk1 where t1.pk1 != 6 order by t1.pk1 DESC; pk1 pk2 pk1 pk2 9 1 1 3 3 6 6 9 1 3 3 6 drop table t; create table t (k int, uq int, unique key ix1 (uq)) engine = ndb; insert into t values (1,3), (3,NULL), (6,9), (9,1); explain extended select straight_join * from t as a join t as b on a.uq=b.uq or b.uq is null; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE a ALL ix1 NULL NULL NULL 4 100.00 1 SIMPLE b ref_or_null ix1 ix1 5 test.a.uq 2 100.00 Using where Warnings: Note 9999 Table 'b' is not pushable: This table access method can not be pushed. Note 1003 /* select#1 */ select straight_join `test`.`a`.`k` AS `k`,`test`.`a`.`uq` AS `uq`,`test`.`b`.`k` AS `k`,`test`.`b`.`uq` AS `uq` from `test`.`t` `a` join `test`.`t` `b` where ((`test`.`b`.`uq` = `test`.`a`.`uq`) or isnull(`test`.`b`.`uq`)) select straight_join * from t as a join t as b on a.uq=b.uq or b.uq is null; k uq k uq 1 3 1 3 1 3 3 NULL 3 NULL 3 NULL 6 9 3 NULL 6 9 6 9 9 1 3 NULL 9 1 9 1 drop table t; create table t (k int primary key, uq int) engine = ndb; insert into t values (1,3), (3,NULL), (6,9), (9,1); explain extended select * from t as a left join t as b on a.k is null and a.uq=b.uq; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE a ALL NULL NULL NULL NULL 4 100.00 1 SIMPLE b ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) Warnings: Note 9999 Can't push table 'b' as child, 'type' must be a 'ref' access Note 1003 /* select#1 */ select `test`.`a`.`k` AS `k`,`test`.`a`.`uq` AS `uq`,`test`.`b`.`k` AS `k`,`test`.`b`.`uq` AS `uq` from `test`.`t` `a` left join `test`.`t` `b` on((<cache>(isnull(`test`.`a`.`k`)) and (`test`.`a`.`uq` = `test`.`b`.`uq`))) where 1 select * from t as a left join t as b on a.k is null and a.uq=b.uq; k uq k uq 1 3 NULL NULL 3 NULL NULL NULL 6 9 NULL NULL 9 1 NULL NULL drop table t; create table tc( a varchar(10) not null, b varchar(10), c varchar(10), primary key (a), unique key uk1 (b, c) )engine=ndbcluster; insert into tc values ('aa','bb', 'x'), ('bb','cc', 'x'), ('cc', 'dd', 'x'); explain extended select * from tc as x1 right outer join tc as x2 on x1.b=x2.a left outer join tc as x3 on x2.b = x3.b and x1.c=x3.c; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x2 ALL NULL NULL NULL NULL 3 100.00 1 SIMPLE x1 ref uk1 uk1 13 test.x2.a 1 100.00 Parent of 2 pushed join@1 1 SIMPLE x3 ref uk1 uk1 26 test.x2.b,test.x1.c 1 100.00 Child of 'x1' in pushed join@1 Warnings: Note 9999 Can't push table 'x1' as child of 'x2', outer join of scan-child not implemented Note 9999 Can't push table 'x3' as child of 'x2', column 'x1.c' is outside scope of pushable join Note 1003 /* select#1 */ select `test`.`x1`.`a` AS `a`,`test`.`x1`.`b` AS `b`,`test`.`x1`.`c` AS `c`,`test`.`x2`.`a` AS `a`,`test`.`x2`.`b` AS `b`,`test`.`x2`.`c` AS `c`,`test`.`x3`.`a` AS `a`,`test`.`x3`.`b` AS `b`,`test`.`x3`.`c` AS `c` from `test`.`tc` `x2` left join `test`.`tc` `x1` on((`test`.`x1`.`b` = `test`.`x2`.`a`)) left join `test`.`tc` `x3` on(((`test`.`x2`.`b` = `test`.`x3`.`b`) and (`test`.`x1`.`c` = `test`.`x3`.`c`))) where 1 select * from tc as x1 right outer join tc as x2 on x1.b=x2.a left outer join tc as x3 on x2.b = x3.b and x1.c=x3.c; a b c a b c a b c NULL NULL NULL aa bb x NULL NULL NULL aa bb x bb cc x bb cc x bb cc x cc dd x cc dd x explain extended select * from tc as x1, tc as x2 where x1.b=x2.a for update; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL uk1 NULL NULL NULL 3 100.00 Using where with pushed condition: (`test`.`x1`.`b` is not null) 1 SIMPLE x2 eq_ref PRIMARY PRIMARY 12 test.x1.b 1 100.00 Warnings: Note 9999 Table 'x1' is not pushable: lock modes other than 'read committed' not implemented Note 9999 Table 'x2' is not pushable: lock modes other than 'read committed' not implemented Note 1003 /* select#1 */ select `test`.`x1`.`a` AS `a`,`test`.`x1`.`b` AS `b`,`test`.`x1`.`c` AS `c`,`test`.`x2`.`a` AS `a`,`test`.`x2`.`b` AS `b`,`test`.`x2`.`c` AS `c` from `test`.`tc` `x1` join `test`.`tc` `x2` where (`test`.`x2`.`a` = `test`.`x1`.`b`) explain extended select * from tc as x1, tc as x2 where x1.b=x2.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL uk1 NULL NULL NULL 3 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`x1`.`b` is not null) 1 SIMPLE x2 eq_ref PRIMARY PRIMARY 12 test.x1.b 1 100.00 Child of 'x1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`x1`.`a` AS `a`,`test`.`x1`.`b` AS `b`,`test`.`x1`.`c` AS `c`,`test`.`x2`.`a` AS `a`,`test`.`x2`.`b` AS `b`,`test`.`x2`.`c` AS `c` from `test`.`tc` `x1` join `test`.`tc` `x2` where (`test`.`x2`.`a` = `test`.`x1`.`b`) drop table tc; create table t1 ( a varchar(16) not null, b int not null, c varchar(16) not null, d int not null, primary key (a,b) ) engine ndb partition by key (a); insert into t1 values ('aaa', 1, 'aaa', 1); explain extended select * from t1 as q1, t1 as q2 where q1.a = 'aaa' and q1.c=q2.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE q1 ref PRIMARY PRIMARY 18 const 2 100.00 Parent of 2 pushed join@1; Using where with pushed condition: (`test`.`q1`.`a` = 'aaa') 1 SIMPLE q2 ref PRIMARY PRIMARY 18 test.q1.c 1 100.00 Child of 'q1' in pushed join@1 Warnings: Note 1003 /* select#1 */ select `test`.`q1`.`a` AS `a`,`test`.`q1`.`b` AS `b`,`test`.`q1`.`c` AS `c`,`test`.`q1`.`d` AS `d`,`test`.`q2`.`a` AS `a`,`test`.`q2`.`b` AS `b`,`test`.`q2`.`c` AS `c`,`test`.`q2`.`d` AS `d` from `test`.`t1` `q1` join `test`.`t1` `q2` where ((`test`.`q2`.`a` = `test`.`q1`.`c`) and (`test`.`q1`.`a` = 'aaa')) select * from t1 as q1, t1 as q2 where q1.a = 'aaa' and q1.c=q2.a; a b c d a b c d aaa 1 aaa 1 aaa 1 aaa 1 drop table t1; CREATE TABLE t1 ( a int NOT NULL, b int NOT NULL, c int NOT NULL, d int, PRIMARY KEY (`a`,`b`), unique key(c) ) ENGINE=ndbcluster; insert into t1 values (1,1,1,1), (1,2,2,1), (1,3,3,1), (1,4,4,1), (1,5,5,2), (1,6,6,2), (1,7,7,2), (1,8,8,2); explain extended select count(*) from t1 as x1 join (t1 as x2 left join (t1 as x3 cross join t1 as x4) on x2.d=x3.a) on x2.c is null or x1.a=x4.d; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x2 ALL NULL NULL NULL NULL 8 100.00 1 SIMPLE x3 ref PRIMARY PRIMARY 4 test.x2.d 1 100.00 1 SIMPLE x4 ALL NULL NULL NULL NULL 8 100.00 Parent of 2 pushed join@1; Using where 1 SIMPLE x1 ref PRIMARY PRIMARY 4 test.x4.d 1 100.00 Child of 'x4' in pushed join@1 Warnings: Note 9999 Can't push table 'x3' as child of 'x2', outer join of scan-child not implemented Note 9999 Can't push table 'x4' as child, 'type' must be a 'ref' access Note 9999 Can't push table 'x1' as child of 'x2', column 'x4.d' is outside scope of pushable join Note 9999 Can't push table 'x1' as child of 'x3', column 'x4.d' is outside scope of pushable join Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` `x1` join `test`.`t1` `x2` left join (`test`.`t1` `x3` join `test`.`t1` `x4`) on((`test`.`x3`.`a` = `test`.`x2`.`d`)) where (`test`.`x1`.`a` = `test`.`x4`.`d`) select count(*) from t1 as x1 join (t1 as x2 left join (t1 as x3 cross join t1 as x4) on x2.d=x3.a) on x2.c is null or x1.a=x4.d; count(*) 1024 explain extended select count(*) from t1 as x1 left join (t1 as x2 cross join t1 as x3) on x1.d=x2.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x1 ALL NULL NULL NULL NULL 8 100.00 1 SIMPLE x2 ref PRIMARY PRIMARY 4 test.x1.d 1 100.00 1 SIMPLE x3 ALL NULL NULL NULL NULL 8 100.00 Warnings: Note 9999 Can't push table 'x2' as child of 'x1', outer join of scan-child not implemented Note 9999 Can't push table 'x3' as child, 'type' must be a 'ref' access Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` `x1` left join (`test`.`t1` `x2` join `test`.`t1` `x3`) on((`test`.`x1`.`d` = `test`.`x2`.`a`)) where 1 select count(*) from t1 as x1 left join (t1 as x2 cross join t1 as x3) on x1.d=x2.a; count(*) 260 explain extended select count(*) from t1 as x0 left join (t1 as x1 join (t1 as x2 left join (t1 as x3 join t1 as x4 on x3.d=x4.a) on x2.d=x3.a) on x2.c is null or x1.a=x4.d) on x0.d=x1.a; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE x0 ALL NULL NULL NULL NULL 8 100.00 1 SIMPLE x1 ref PRIMARY PRIMARY 4 test.x0.d 1 100.00 1 SIMPLE x2 ALL c NULL NULL NULL 8 100.00 1 SIMPLE x3 ref PRIMARY PRIMARY 4 test.x2.d 1 100.00 Parent of 2 pushed join@1 1 SIMPLE x4 ref PRIMARY PRIMARY 4 test.x3.d 1 100.00 Child of 'x3' in pushed join@1; Using where Warnings: Note 9999 Can't push table 'x1' as child of 'x0', outer join of scan-child not implemented Note 9999 Can't push table 'x2' as child, 'type' must be a 'ref' access Note 9999 Can't push table 'x3' as child of 'x0', column 'x2.d' is outside scope of pushable join Note 9999 Can't push table 'x4' as child of 'x0', column 'x3.d' is outside scope of pushable join Note 9999 Can't push table 'x3' as child of 'x1', column 'x2.d' is outside scope of pushable join Note 9999 Can't push table 'x4' as child of 'x1', column 'x3.d' is outside scope of pushable join Note 9999 Can't push table 'x3' as child of 'x2', outer join of scan-child not implemented Note 9999 Can't push table 'x4' as child of 'x2', column 'x3.d' is outside scope of pushable join Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t1` `x0` left join (`test`.`t1` `x1` join `test`.`t1` `x2` left join (`test`.`t1` `x3` join `test`.`t1` `x4`) on(((`test`.`x2`.`d` = `test`.`x3`.`a`) and (`test`.`x3`.`d` = `test`.`x4`.`a`)))) on(((`test`.`x0`.`d` = `test`.`x1`.`a`) and (isnull(`test`.`x2`.`c`) or (`test`.`x1`.`a` = `test`.`x4`.`d`)))) where 1 select count(*) from t1 as x0 left join (t1 as x1 join (t1 as x2 left join (t1 as x3 join t1 as x4 on x3.d=x4.a) on x2.d=x3.a) on x2.c is null or x1.a=x4.d) on x0.d=x1.a; count(*) 2052 drop table t1; create table t1 (pk char(10) primary key, u int not null) engine=ndb; create table t2 (pk int primary key, u int not null) engine=ndb; insert into t1 values ('wh',1); insert into t1 values ('ik',2); insert into t1 values ('cu',3); insert into t1 values ('pw',4); insert into t1 values ('cq',4); insert into t2 values (1,2), (2,3), (3,4), (4,5); explain select * from t1 join t2 on t1.u = t2.pk order by t1.pk; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 index NULL PRIMARY 10 NULL 5 Parent of 2 pushed join@1 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.u 1 Child of 't1' in pushed join@1 select * from t1 join t2 on t1.u = t2.pk order by t1.pk; pk u pk u cq 4 4 5 cu 3 3 4 ik 2 2 3 pw 4 4 5 wh 1 1 2 drop table t1; drop table t2; create table t1 ( a char(10) primary key, b char(10) not null, c char(10) not null, l00 char(255) not null, l01 char(255) not null, l02 char(255) not null, l03 char(255) not null, l04 char(255) not null, l05 char(255) not null, l06 char(255) not null, l07 char(255) not null, l08 char(255) not null, l09 char(255) not null, l10 char(255) not null, l11 char(255) not null, l12 char(255) not null, l13 char(255) not null, l14 char(255) not null, l15 char(255) not null, l16 char(255) not null, l17 char(255) not null, l18 char(255) not null, l19 char(255) not null, l20 char(255) not null, l21 char(255) not null, l22 char(255) not null, l23 char(255) not null, l24 char(255) not null, l25 char(255) not null, l26 char(255) not null, l27 char(255) not null, l28 char(255) not null, l29 char(255) not null, l30 char(255) not null, l31 char(255) not null, index(c, b) ) engine=ndb partition by key(a) partitions 8; insert into t1 values ('a','a','a','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x'); insert into t1 values ('b','b','b','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x'); insert into t1 values ('c','c','c','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x'); explain select count(*) from t1 as x1 join t1 as x2 on x1.b = x2.c; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE x1 ALL NULL NULL NULL NULL 3 Parent of 2 pushed join@1 1 SIMPLE x2 ref c c 10 test.x1.b 1 Child of 'x1' in pushed join@1 select count(*) from t1 as x1 join t1 as x2 on x1.b = x2.c; count(*) 3 drop table t1; create temporary table spj_counts_at_end select counter_name, sum(val) as val from ndbinfo.counters where block_name='DBSPJ' group by counter_name; select spj_counts_at_end.counter_name, spj_counts_at_end.val - spj_counts_at_startup.val from spj_counts_at_end, spj_counts_at_startup where spj_counts_at_end.counter_name = spj_counts_at_startup.counter_name and spj_counts_at_end.counter_name <> 'LOCAL_READS_SENT' and spj_counts_at_end.counter_name <> 'REMOTE_READS_SENT' and spj_counts_at_end.counter_name <> 'LOCAL_RANGE_SCANS_SENT' and spj_counts_at_end.counter_name <> 'REMOTE_RANGE_SCANS_SENT' and spj_counts_at_end.counter_name <> 'SCAN_BATCHES_RETURNED'; counter_name spj_counts_at_end.val - spj_counts_at_startup.val CONST_PRUNED_RANGE_SCANS_RECEIVED 6 LOCAL_TABLE_SCANS_SENT 244 PRUNED_RANGE_SCANS_RECEIVED 25 RANGE_SCANS_RECEIVED 725 READS_NOT_FOUND 6619 READS_RECEIVED 52 SCAN_ROWS_RETURNED 76344 TABLE_SCANS_RECEIVED 244 select sum(spj_counts_at_end.val - spj_counts_at_startup.val) as 'LOCAL+REMOTE READS_SENT' from spj_counts_at_end, spj_counts_at_startup where spj_counts_at_end.counter_name = spj_counts_at_startup.counter_name and (spj_counts_at_end.counter_name = 'LOCAL_READS_SENT' or spj_counts_at_end.counter_name = 'REMOTE_READS_SENT'); LOCAL+REMOTE READS_SENT 35281 drop table spj_save_counts; drop table spj_counts_at_startup; drop table spj_counts_at_end; scan_count 2387 pruned_scan_count 11 sorted_scan_count 40 pushed_queries_defined 385 pushed_queries_dropped 12 pushed_queries_executed 539 set ndb_join_pushdown = @save_ndb_join_pushdown;