set @@join_buffer_size=256*1024;
create table t1 (a int, b int, c int);
create table t2 (a int, b int, c int, d decimal);
insert into t1 values
(1,21,345), (1,33,7), (8,33,114), (1,21,500), (1,19,107), (5,14,787),
(8,33,123), (9,10,211), (5,16,207), (1,33,988), (5,27,132), (1,21,104),
(6,20,309), (6,20,315), (1,21,101), (8,33,404), (9,10,800), (1,21,123),
(7,11,708), (6,20,214);
insert into t2 values
(2,3,207,207.0000), (1,21,909,12.0000), (7,13,312,406.0000),
(8,64,248,107.0000), (6,20,315,279.3333), (1,19,203,107.0000),
(8,80,800,314.0000), (3,12,231,190.0000), (6,23,303,909.0000);
Warnings:
Note 1265 Data truncated for column 'd' at row 5
create table t1_double(a int, b double, c double);
insert into t1_double values
(1,23.4,14.3333), (1,12.5,18.9), (3,12.5,18.9),
(4,33.4,14.3333), (4,14.3333,13.65), (5,17.89,7.22),
(6,33.4,14.3), (10,33.4,13.65), (11,33.4,13.65);
create table t2_double(a int, b double, c double);
insert into t2_double values
(1,22.4,14.3333), (1,12.5,18.9), (2,22.4,18.9),
(4,33.4,14.3333), (5,22.4,13.65), (7,17.89,18.9),
(6,33.4,14.3333), (10,31.4,13.65), (12,33.4,13.65);
create table t1_char(a char, b char(8), c int) charset=latin1;
insert into t1_char values
('a','Ivan',1), ('b','Vika',2), ('b','Inga',6), ('c','Vika',7),
('b','Ivan',7), ('a','Alex',6), ('b','Inga',5), ('d','Ron',9),
('d','Harry',2), ('d','Hermione',3), ('c','Ivan',3), ('c','Harry',4);
create table t2_char(a char, b char(8), c int) charset=latin1;
insert into t2_char values
('b','Ivan',1), ('c','Vinny',3), ('c','Inga',9), ('a','Vika',1),
('c','Ivan',2), ('b','Ali',6), ('c','Inga',2), ('a','Ron',9),
('d','Harry',1), ('b','Hermes',3), ('b','Ivan',11), ('b','Harry',4);
create table t1_decimal (a decimal(3,1), b decimal(3,1), c int);
insert into t1_decimal values
(1,1,23),(2,2,11),(3,3,16),
(1,1,12),(1,1,14),(2,3,15),
(2,1,13),(2,3,11),(3,3,16);
create table t2_decimal (a decimal(3,1), b decimal(3,1), c int);
insert into t2_decimal values
(2,1,13),(2,2,11),(3,3,16),
(1,3,22),(1,3,14),(2,2,15),
(2,1,43),(2,3,11),(2,3,16);
create view v1 as select a, b, max(c) as max_c, avg(c) as avg_c from t1
group by a,b having max_c < 707;
create view v2 as select a, b, max(c) as max_c, avg(c) as avg_c from t1
where t1.a>5 group by a,b having max_c < 707;
create view v3 as select a, b, min(c) as min_c from t1
where t1.a<10 group by a,b having min_c > 109;
create view v4 as
select a, b, min(max_c) as min_c from v1
where (v1.a<15) group by a,b;
create view v_union as
select a, b, min(c) as c from t1
where t1.a<10 group by a,b having c > 109
union
select a, b, max(c) as c from t1
where t1.b>10 group by a,b having c < 300;
create view v2_union as
select a, b, min(c) as c from t1
where t1.a<10 group by a,b having c > 109
union
select a, b, max(c) as c from t1
where t1.b>10 group by a,b having c < 300
union
select a, b, avg(c) as c from t1
where t1.c>300 group by a,b having c < 707;
create view v3_union as
select a, b, (a+1) as c from t1
where t1.a<10
union
select a, b, c from t1
where t1.b>10and t1.c>100;
create view v4_union as
select a, b, max(c)-100 as c from t1
where t1.a<10 group by a,b having c > 109
union
select a, b, (c+100) as c from t1
where t1.b>10;
create view v_double as
select a, avg(a/4) as avg_a, b, c from t1_double
where (b>12.2) group by b,c having (avg_a<22.333);
create view v_char as
select a, b, max(c) as max_c from t1_char
group by a,b having max_c < 9;
create view v_decimal as
select a, b, avg(c) as avg_c from t1_decimal
group by a,b having (avg_c>12);
# conjunctive subformula : pushing into HAVING set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.max_c>214) and (t2.a>v1.a);
a b max_c avg_c a b c d 121500234.600023207207 121500234.6000713312406 121500234.6000864248107 121500234.6000620315279 121500234.6000880800314 121500234.6000312231190 121500234.6000623303909 620315279.3333713312406 620315279.3333864248107 620315279.3333880800314
select * from v1,t2 where (v1.max_c>214) and (t2.a>v1.a);
a b max_c avg_c a b c d 121500234.600023207207 121500234.6000713312406 121500234.6000864248107 121500234.6000620315279 121500234.6000880800314 121500234.6000312231190 121500234.6000623303909 620315279.3333713312406 620315279.3333864248107 620315279.3333880800314
explain select * from v1,t2 where (v1.max_c>214) and (t2.a>v1.a);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort
explain format=json select * from v1,t2 where (v1.max_c>214) and (t2.a>v1.a);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.max_c > 214"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "t2.a > v1.a", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and max_c > 214", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
group by a,b having max_c < 707) v1,
t2 where (v1.a=t2.a) and (v1.max_c>300);
a b max_c avg_c a b c d 121500234.600012190912 833404213.6667864248107 620315279.3333620315279 121500234.6000119203107 833404213.6667880800314 620315279.3333623303909
select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
group by a,b having max_c < 707) v1,
t2 where (v1.a=t2.a) and (v1.max_c>300);
a b max_c avg_c a b c d 121500234.600012190912 833404213.6667864248107 620315279.3333620315279 121500234.6000119203107 833404213.6667880800314 620315279.3333623303909
explain select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
group by a,b having max_c < 707) v1,
t2 where (v1.a=t2.a) and (v1.max_c>300);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key0 key0 5 test.t2.a 2 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort
explain format=json select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
group by a,b having max_c < 707) v1,
t2 where (v1.a=t2.a) and (v1.max_c>300);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.max_c > 300", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and max_c > 300", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
# extracted or formula : pushing into HAVING set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where
((v1.max_c>400) and (t2.a>v1.a)) or ((v1.max_c<135) and (t2.a<v1.a));
a b max_c avg_c a b c d 121500234.600023207207 121500234.6000713312406 121500234.6000864248107 121500234.6000620315279 121500234.6000880800314 121500234.6000312231190 121500234.6000623303909 527132132.000023207207 527132132.000012190912 527132132.0000119203107 527132132.0000312231190
select * from v1,t2 where
((v1.max_c>400) and (t2.a>v1.a)) or ((v1.max_c<135) and (t2.a<v1.a));
a b max_c avg_c a b c d 121500234.600023207207 121500234.6000713312406 121500234.6000864248107 121500234.6000620315279 121500234.6000880800314 121500234.6000312231190 121500234.6000623303909 527132132.000023207207 527132132.000012190912 527132132.0000119203107 527132132.0000312231190
explain select * from v1,t2 where
((v1.max_c>400) and (t2.a>v1.a)) or ((v1.max_c<135) and (t2.a<v1.a));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort
explain format=json select * from v1,t2 where
((v1.max_c>400) and (t2.a>v1.a)) or ((v1.max_c<135) and (t2.a<v1.a));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.max_c > 400 or v1.max_c < 135"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v1.max_c > 400 and t2.a > v1.a or v1.max_c < 135 and t2.a < v1.a", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and (max_c > 400 or max_c < 135)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where
((v1.max_c>300) and (v1.avg_c>t2.d) and (v1.b=t2.b)) or
((v1.max_c<135) and (v1.max_c<t2.c) and (v1.a=t2.a));
a b max_c avg_c a b c d 119107107.000012190912 119107107.0000119203107 121500234.600012190912 620315279.3333620315279
select * from v1,t2 where
((v1.max_c>300) and (v1.avg_c>t2.d) and (v1.b=t2.b)) or
((v1.max_c<135) and (v1.max_c<t2.c) and (v1.a=t2.a));
a b max_c avg_c a b c d 119107107.000012190912 119107107.0000119203107 121500234.600012190912 620315279.3333620315279
explain select * from v1,t2 where
((v1.max_c>300) and (v1.avg_c>t2.d) and (v1.b=t2.b)) or
((v1.max_c<135) and (v1.max_c<t2.c) and (v1.a=t2.a));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort
explain format=json select * from v1,t2 where
((v1.max_c>300) and (v1.avg_c>t2.d) and (v1.b=t2.b)) or
((v1.max_c<135) and (v1.max_c<t2.c) and (v1.a=t2.a));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.max_c > 300 or v1.max_c < 135"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v1.b = t2.b and v1.max_c > 300 and v1.avg_c > t2.d or v1.a = t2.a and v1.max_c < 135 and v1.max_c < t2.c", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and (max_c > 300 or max_c < 135)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
# conjunctive subformula : pushing into WHERE set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a>6) and (t2.b>v1.b);
a b max_c avg_c a b c d 833404213.6667864248107 833404213.6667880800314
select * from v1,t2 where (v1.a>6) and (t2.b>v1.b);
a b max_c avg_c a b c d 833404213.6667864248107 833404213.6667880800314
explain select * from v1,t2 where (v1.a>6) and (t2.b>v1.b);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v1,t2 where (v1.a>6) and (t2.b>v1.b);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a > 6"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "t2.b > v1.b", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 6"
}
}
]
}
}
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v2,t2 where (v2.b>25) and (t2.a<v2.a);
a b max_c avg_c a b c d 833404213.666723207207 833404213.666712190912 833404213.6667713312406 833404213.6667620315279 833404213.6667119203107 833404213.6667312231190 833404213.6667623303909
select * from v2,t2 where (v2.b>25) and (t2.a<v2.a);
a b max_c avg_c a b c d 833404213.666723207207 833404213.666712190912 833404213.6667713312406 833404213.6667620315279 833404213.6667119203107 833404213.6667312231190 833404213.6667623303909
explain select * from v2,t2 where (v2.b>25) and (t2.a<v2.a);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v2,t2 where (v2.b>25) and (t2.a<v2.a);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v2.b > 25"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "t2.a < v2.a", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5 and t1.b > 25"
}
}
]
}
}
}
}
}
}
]
}
}
# extracted or formula : pushing into WHERE set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where
((v1.a>7) and (t2.c<v1.max_c)) or ((v1.a<2) and (t2.b<v1.b));
a b max_c avg_c a b c d 119107107.000023207207 119107107.0000713312406 119107107.0000312231190 121500234.600023207207 121500234.6000713312406 121500234.6000620315279 121500234.6000119203107 121500234.6000312231190 833404213.666723207207 833404213.6667713312406 833404213.6667864248107 833404213.6667620315279 833404213.6667119203107 833404213.6667312231190 833404213.6667623303909
select * from v1,t2 where
((v1.a>7) and (t2.c<v1.max_c)) or ((v1.a<2) and (t2.b<v1.b));
a b max_c avg_c a b c d 119107107.000023207207 119107107.0000713312406 119107107.0000312231190 121500234.600023207207 121500234.6000713312406 121500234.6000620315279 121500234.6000119203107 121500234.6000312231190 833404213.666723207207 833404213.6667713312406 833404213.6667864248107 833404213.6667620315279 833404213.6667119203107 833404213.6667312231190 833404213.6667623303909
explain select * from v1,t2 where
((v1.a>7) and (t2.c<v1.max_c)) or ((v1.a<2) and (t2.b<v1.b));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v1,t2 where
((v1.a>7) and (t2.c<v1.max_c)) or ((v1.a<2) and (t2.b<v1.b));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a > 7 or v1.a < 2"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v1.a > 7 and t2.c < v1.max_c or v1.a < 2 and t2.b < v1.b", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 7 or t1.a < 2"
}
}
]
}
}
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v2,t2 where
((v2.a>7) and (t2.c<v2.max_c)) or ((v2.a>5) and (t2.b<v2.b));
a b max_c avg_c a b c d 620315279.333323207207 620315279.3333713312406 620315279.3333119203107 620315279.3333312231190 833404213.666723207207 833404213.666712190912 833404213.6667713312406 833404213.6667864248107 833404213.6667620315279 833404213.6667119203107 833404213.6667312231190 833404213.6667623303909
select * from v2,t2 where
((v2.a>7) and (t2.c<v2.max_c)) or ((v2.a>5) and (t2.b<v2.b));
a b max_c avg_c a b c d 620315279.333323207207 620315279.3333713312406 620315279.3333119203107 620315279.3333312231190 833404213.666723207207 833404213.666712190912 833404213.6667713312406 833404213.6667864248107 833404213.6667620315279 833404213.6667119203107 833404213.6667312231190 833404213.6667623303909
explain select * from v2,t2 where
((v2.a>7) and (t2.c<v2.max_c)) or ((v2.a>5) and (t2.b<v2.b));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v2,t2 where
((v2.a>7) and (t2.c<v2.max_c)) or ((v2.a>5) and (t2.b<v2.b));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v2.a > 7 or v2.a > 5"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v2.a > 7 and t2.c < v2.max_c or v2.a > 5 and t2.b < v2.b", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5 and (t1.a > 7 or t1.a > 5)"
}
}
]
}
}
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where
((v1.a>4) and (v1.b>t2.b) and (v1.max_c=t2.d)) or
((v1.a<2) and (v1.max_c<t2.c) and (v1.max_c=t2.d));
a b max_c avg_c a b c d 119107107.0000864248107 119107107.0000119203107 516207207.000023207207
select * from v1,t2 where
((v1.a>4) and (v1.b>t2.b) and (v1.max_c=t2.d)) or
((v1.a<2) and (v1.max_c<t2.c) and (v1.max_c=t2.d));
a b max_c avg_c a b c d 119107107.0000864248107 119107107.0000119203107 516207207.000023207207
explain select * from v1,t2 where
((v1.a>4) and (v1.b>t2.b) and (v1.max_c=t2.d)) or
((v1.a<2) and (v1.max_c<t2.c) and (v1.max_c=t2.d));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v1,t2 where
((v1.a>4) and (v1.b>t2.b) and (v1.max_c=t2.d)) or
((v1.a<2) and (v1.max_c<t2.c) and (v1.max_c=t2.d));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a > 4 or v1.a < 2"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v1.a > 4 and v1.b > t2.b and v1.max_c = t2.d or v1.a < 2 and v1.max_c < t2.c and v1.max_c = t2.d", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 4 or t1.a < 2"
}
}
]
}
}
}
}
}
}
]
}
}
# conjunctive subformulas : pushing into HAVING and WHERE set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a<2) and (v1.max_c>400) and (t2.b>v1.b);
a b max_c avg_c a b c d 121500234.6000864248107 121500234.6000880800314 121500234.6000623303909
select * from v1,t2 where (v1.a<2) and (v1.max_c>400) and (t2.b>v1.b);
a b max_c avg_c a b c d 121500234.6000864248107 121500234.6000880800314 121500234.6000623303909
explain select * from v1,t2 where (v1.a<2) and (v1.max_c>400) and (t2.b>v1.b);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v1,t2 where (v1.a<2) and (v1.max_c>400) and (t2.b>v1.b);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a < 2 and v1.max_c > 400"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "t2.b > v1.b", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and max_c > 400", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 2"
}
}
]
}
}
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v_double as v,t2_double as t where
(v.a=t.a) and (v.avg_a>0.45) and (v.b>10);
a avg_a b c a b c 10.5000000012.518.9122.414.3333 10.5000000012.518.9112.518.9 41.0000000033.414.3333433.414.3333 41.0000000014.333313.65433.414.3333 51.2500000017.897.22522.413.65 61.5000000033.414.3633.414.3333 102.6250000033.413.651031.413.65
select * from v_double as v,t2_double as t where
(v.a=t.a) and (v.avg_a>0.45) and (v.b>10);
a avg_a b c a b c 10.5000000012.518.9122.414.3333 10.5000000012.518.9112.518.9 41.0000000033.414.3333433.414.3333 41.0000000014.333313.65433.414.3333 51.2500000017.897.22522.413.65 61.5000000033.414.3633.414.3333 102.6250000033.413.651031.413.65
explain select * from v_double as v,t2_double as t where
(v.a=t.a) and (v.avg_a>0.45) and (v.b>10);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key0 key0 5 test.t.a 1 Using where 2 DERIVED t1_double ALL NULL NULL NULL NULL 9 Using where; Using temporary; Using filesort
explain format=json select * from v_double as v,t2_double as t where
(v.a=t.a) and (v.avg_a>0.45) and (v.b>10);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t.a"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v.avg_a > 0.45 and v.b > 10", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "avg_a < 22.333 and avg_a > 0.45", "filesort": { "sort_key": "t1_double.b, t1_double.c", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1_double", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1_double.b > 12.2 and t1_double.b > 10"
}
}
]
}
}
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v_decimal as v,t2_decimal as t where
(v.a=t.a) and (v.avg_c>15) and (v.b>1);
a b avg_c a b c 3.03.016.00003.03.016
select * from v_decimal as v,t2_decimal as t where
(v.a=t.a) and (v.avg_c>15) and (v.b>1);
a b avg_c a b c 3.03.016.00003.03.016
explain select * from v_decimal as v,t2_decimal as t where
(v.a=t.a) and (v.avg_c>15) and (v.b>1);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key0 key0 3 test.t.a 1 Using where 2 DERIVED t1_decimal ALL NULL NULL NULL NULL 9 Using where; Using temporary; Using filesort
explain format=json select * from v_decimal as v,t2_decimal as t where
(v.a=t.a) and (v.avg_c>15) and (v.b>1);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "3", "used_key_parts": ["a"], "ref": ["test.t.a"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v.avg_c > 15 and v.b > 1", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "avg_c > 12 and avg_c > 15", "filesort": { "sort_key": "t1_decimal.a, t1_decimal.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1_decimal", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1_decimal.b > 1"
}
}
]
}
}
}
}
}
}
]
}
}
# extracted or formula : pushing into HAVING and WHERE set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where
((v1.a>7) and (v1.max_c>300) and (t2.c<v1.max_c)) or
((v1.a<4) and (v1.max_c<500) and (t2.b<v1.b));
a b max_c avg_c a b c d 119107107.000023207207 119107107.0000713312406 119107107.0000312231190 833404213.666723207207 833404213.6667713312406 833404213.6667864248107 833404213.6667620315279 833404213.6667119203107 833404213.6667312231190 833404213.6667623303909
select * from v1,t2 where
((v1.a>7) and (v1.max_c>300) and (t2.c<v1.max_c)) or
((v1.a<4) and (v1.max_c<500) and (t2.b<v1.b));
a b max_c avg_c a b c d 119107107.000023207207 119107107.0000713312406 119107107.0000312231190 833404213.666723207207 833404213.6667713312406 833404213.6667864248107 833404213.6667620315279 833404213.6667119203107 833404213.6667312231190 833404213.6667623303909
explain select * from v1,t2 where
((v1.a>7) and (v1.max_c>300) and (t2.c<v1.max_c)) or
((v1.a<4) and (v1.max_c<500) and (t2.b<v1.b));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v1,t2 where
((v1.a>7) and (v1.max_c>300) and (t2.c<v1.max_c)) or
((v1.a<4) and (v1.max_c<500) and (t2.b<v1.b));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a > 7 and v1.max_c > 300 or v1.a < 4 and v1.max_c < 500"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v1.a > 7 and v1.max_c > 300 and t2.c < v1.max_c or v1.a < 4 and v1.max_c < 500 and t2.b < v1.b", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and (t1.a > 7 and max_c > 300 or t1.a < 4 and max_c < 500)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 7 or t1.a < 4"
}
}
]
}
}
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where ((v1.a<2) and (v1.max_c>120)) or (v1.a>7);
a b max_c avg_c a b c d 121500234.600023207207 121500234.600012190912 121500234.6000713312406 121500234.6000864248107 121500234.6000620315279 121500234.6000119203107 121500234.6000880800314 121500234.6000312231190 121500234.6000623303909 833404213.666723207207 833404213.666712190912 833404213.6667713312406 833404213.6667864248107 833404213.6667620315279 833404213.6667119203107 833404213.6667880800314 833404213.6667312231190 833404213.6667623303909
select * from v1,t2 where ((v1.a<2) and (v1.max_c>120)) or (v1.a>7);
a b max_c avg_c a b c d 121500234.600023207207 121500234.600012190912 121500234.6000713312406 121500234.6000864248107 121500234.6000620315279 121500234.6000119203107 121500234.6000880800314 121500234.6000312231190 121500234.6000623303909 833404213.666723207207 833404213.666712190912 833404213.6667713312406 833404213.6667864248107 833404213.6667620315279 833404213.6667119203107 833404213.6667880800314 833404213.6667312231190 833404213.6667623303909
explain select * from v1,t2 where ((v1.a<2) and (v1.max_c>120)) or (v1.a>7);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v1,t2 where ((v1.a<2) and (v1.max_c>120)) or (v1.a>7);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a < 2 and v1.max_c > 120 or v1.a > 7"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v1.a < 2 and v1.max_c > 120 or v1.a > 7", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and (t1.a < 2 and max_c > 120 or t1.a > 7)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 2 or t1.a > 7"
}
}
]
}
}
}
}
}
}
]
}
}
# extracted or formulas : pushing into WHERE and HAVING set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where
((v1.a<2) and (v1.max_c>120) and (v1.b=t2.b)) or (v1.a>7);
a b max_c avg_c a b c d 121500234.600012190912 833404213.666723207207 833404213.666712190912 833404213.6667713312406 833404213.6667864248107 833404213.6667620315279 833404213.6667119203107 833404213.6667880800314 833404213.6667312231190 833404213.6667623303909
select * from v1,t2 where
((v1.a<2) and (v1.max_c>120) and (v1.b=t2.b)) or (v1.a>7);
a b max_c avg_c a b c d 121500234.600012190912 833404213.666723207207 833404213.666712190912 833404213.6667713312406 833404213.6667864248107 833404213.6667620315279 833404213.6667119203107 833404213.6667880800314 833404213.6667312231190 833404213.6667623303909
explain select * from v1,t2 where
((v1.a<2) and (v1.max_c>120) and (v1.b=t2.b)) or (v1.a>7);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v1,t2 where
((v1.a<2) and (v1.max_c>120) and (v1.b=t2.b)) or (v1.a>7);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a < 2 and v1.max_c > 120 or v1.a > 7"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v1.b = t2.b and v1.a < 2 and v1.max_c > 120 or v1.a > 7", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and (t1.a < 2 and max_c > 120 or t1.a > 7)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 2 or t1.a > 7"
}
}
]
}
}
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where
((v1.a<2) and (v1.max_c<200) and (t2.c>v1.max_c) and (v1.max_c=t2.d)) or
((v1.a>4) and (v1.max_c<500) and (t2.b<v1.b) and (v1.max_c=t2.c));
a b max_c avg_c a b c d 119107107.0000864248107 119107107.0000119203107 516207207.000023207207
select * from v1,t2 where
((v1.a<2) and (v1.max_c<200) and (t2.c>v1.max_c) and (v1.max_c=t2.d)) or
((v1.a>4) and (v1.max_c<500) and (t2.b<v1.b) and (v1.max_c=t2.c));
a b max_c avg_c a b c d 119107107.0000864248107 119107107.0000119203107 516207207.000023207207
explain select * from v1,t2 where
((v1.a<2) and (v1.max_c<200) and (t2.c>v1.max_c) and (v1.max_c=t2.d)) or
((v1.a>4) and (v1.max_c<500) and (t2.b<v1.b) and (v1.max_c=t2.c));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v1,t2 where
((v1.a<2) and (v1.max_c<200) and (t2.c>v1.max_c) and (v1.max_c=t2.d)) or
((v1.a>4) and (v1.max_c<500) and (t2.b<v1.b) and (v1.max_c=t2.c));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a < 2 and v1.max_c < 200 or v1.a > 4"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v1.a < 2 and v1.max_c < 200 and t2.c > v1.max_c and v1.max_c = t2.d or v1.max_c = t2.c and v1.a > 4 and t2.c < 500 and t2.b < v1.b", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and (t1.a < 2 and max_c < 200 or t1.a > 4 and max_c < 500)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 2 or t1.a > 4"
}
}
]
}
}
}
}
}
}
]
}
}
# prepare of a query containing extracted or formula
prepare stmt from "select * from v1,t2 where
((v1.max_c>400) and (t2.a>v1.a)) or ((v1.max_c<135) and (t2.a<v1.a));";
execute stmt;
a b max_c avg_c a b c d 121500234.600023207207 121500234.6000713312406 121500234.6000864248107 121500234.6000620315279 121500234.6000880800314 121500234.6000312231190 121500234.6000623303909 527132132.000023207207 527132132.000012190912 527132132.0000119203107 527132132.0000312231190
execute stmt;
a b max_c avg_c a b c d 121500234.600023207207 121500234.6000713312406 121500234.6000864248107 121500234.6000620315279 121500234.6000880800314 121500234.6000312231190 121500234.6000623303909 527132132.000023207207 527132132.000012190912 527132132.0000119203107 527132132.0000312231190
deallocate prepare stmt;
prepare stmt from "explain format=json select * from v1,t2 where
((v1.max_c>400) and (t2.a>v1.a)) or ((v1.max_c<135) and (t2.a<v1.a));";
execute stmt;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.max_c > 400 or v1.max_c < 135"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v1.max_c > 400 and t2.a > v1.a or v1.max_c < 135 and t2.a < v1.a", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and (max_c > 400 or max_c < 135)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
execute stmt;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.max_c > 400 or v1.max_c < 135"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v1.max_c > 400 and t2.a > v1.a or v1.max_c < 135 and t2.a < v1.a", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and (max_c > 400 or max_c < 135)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
deallocate prepare stmt;
# conjunctive subformula : pushing into WHERE
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (t2.a=v1.a) and (v1.b=t2.b) and (v1.a=1);
a b max_c avg_c a b c d 121500234.600012190912 119107107.0000119203107
select * from v1,t2 where (t2.a=v1.a) and (v1.b=t2.b) and (v1.a=1);
a b max_c avg_c a b c d 121500234.600012190912 119107107.0000119203107
explain select * from v1,t2 where (t2.a=v1.a) and (v1.b=t2.b) and (v1.a=1);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key0 key0 5 test.t2.b 2 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v1,t2 where (t2.a=v1.a) and (v1.b=t2.b) and (v1.a=1);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a = 1 and t2.b is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["b"], "ref": ["test.t2.b"], "loops": 9, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a = 1", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 1"
}
}
]
}
}
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=5) and (v1.max_c=t2.d);
a b max_c avg_c a b c d 516207207.000023207207
select * from v1,t2 where (v1.a=5) and (v1.max_c=t2.d);
a b max_c avg_c a b c d 516207207.000023207207
explain select * from v1,t2 where (v1.a=5) and (v1.max_c=t2.d);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key0 key0 5 test.t2.d 2 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v1,t2 where (v1.a=5) and (v1.max_c=t2.d);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.d is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["max_c"], "ref": ["test.t2.d"], "loops": 9, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a = 5 and v1.max_c = t2.d", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 5"
}
}
]
}
}
}
}
}
}
]
}
}
# conjunctive subformula : pushing into WHERE using equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (t2.a<5) and (v1.a=t2.a);
a b max_c avg_c a b c d 121500234.600012190912 119107107.000012190912 121500234.6000119203107 119107107.0000119203107
select * from v1,t2 where (t2.a<5) and (v1.a=t2.a);
a b max_c avg_c a b c d 121500234.600012190912 119107107.000012190912 121500234.6000119203107 119107107.0000119203107
explain select * from v1,t2 where (t2.a<5) and (v1.a=t2.a);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key0 key0 5 test.t2.a 2 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v1,t2 where (t2.a<5) and (v1.a=t2.a);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a < 5 and t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 5"
}
}
]
}
}
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=v1.b) and (v1.a=t2.a);
a b max_c avg_c a b c d
select * from v1,t2 where (v1.a=v1.b) and (v1.a=t2.a);
a b max_c avg_c a b c d
explain select * from v1,t2 where (v1.a=v1.b) and (v1.a=t2.a);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key0 key0 10 test.t2.a,test.t2.a 1 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v1,t2 where (v1.a=v1.b) and (v1.a=t2.a);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null and t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "10", "used_key_parts": ["a", "b"], "ref": ["test.t2.a", "test.t2.a"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b = t1.a"
}
}
]
}
}
}
}
}
}
]
}
}
# conjunctive subformula : pushing into HAVING using equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (t2.c>150) and (v1.max_c=t2.c);
a b max_c avg_c a b c d 516207207.000023207207 620315279.3333620315279
select * from v1,t2 where (t2.c>150) and (v1.max_c=t2.c);
a b max_c avg_c a b c d 516207207.000023207207 620315279.3333620315279
explain select * from v1,t2 where (t2.c>150) and (v1.max_c=t2.c);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key0 key0 5 test.t2.c 2 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort
explain format=json select * from v1,t2 where (t2.c>150) and (v1.max_c=t2.c);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.c > 150 and t2.c is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["max_c"], "ref": ["test.t2.c"], "loops": 9, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and max_c > 150", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
# extracted and formula : pushing into WHERE
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=v1.b) and (v1.a=t2.a) and (v1.a=3);
a b max_c avg_c a b c d
select * from v1,t2 where (v1.a=v1.b) and (v1.a=t2.a) and (v1.a=3);
a b max_c avg_c a b c d
explain select * from v1,t2 where (v1.a=v1.b) and (v1.a=t2.a) and (v1.a=3);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where
explain format=json select * from v1,t2 where (v1.a=v1.b) and (v1.a=t2.a) and (v1.a=3);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a = 3"
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a = 3 and v1.b = 3"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 3 and t1.b = 3"
}
}
]
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=1) and (v1.b=21) and (t2.a=2);
a b max_c avg_c a b c d 121500234.600023207207
select * from v1,t2 where (v1.a=1) and (v1.b=21) and (t2.a=2);
a b max_c avg_c a b c d 121500234.600023207207
explain select * from v1,t2 where (v1.a=1) and (v1.b=21) and (t2.a=2);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where
explain format=json select * from v1,t2 where (v1.a=1) and (v1.b=21) and (t2.a=2);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a = 2"
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a = 1 and v1.b = 21"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 1 and t1.b = 21"
}
}
]
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v_char as v,t2_char as t where
(v.a='c') and (v.b<'Hermes') and ((v.b=t.b) or (v.max_c>20));
a b max_c a b c
c Harry 4 d Harry 1
c Harry 4 b Harry 4
select * from v_char as v,t2_char as t where
(v.a='c') and (v.b<'Hermes') and ((v.b=t.b) or (v.max_c>20));
a b max_c a b c
c Harry 4 d Harry 1
c Harry 4 b Harry 4
explain select * from v_char as v,t2_char as t where
(v.a='c') and (v.b<'Hermes') and ((v.b=t.b) or (v.max_c>20));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 12 Using where 1 PRIMARY t ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1_char ALL NULL NULL NULL NULL 12 Using where; Using temporary; Using filesort
explain format=json select * from v_char as v,t2_char as t where
(v.a='c') and (v.b<'Hermes') and ((v.b=t.b) or (v.max_c>20));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 12, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v.a = 'c' and v.b < 'Hermes'", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 9", "filesort": { "sort_key": "t1_char.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1_char", "access_type": "ALL", "loops": 1, "rows": 12, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1_char.a = 'c' and t1_char.b < 'Hermes'"
}
}
]
}
}
}
}
}
},
{ "block-nl-join": { "table": { "table_name": "t", "access_type": "ALL", "loops": 12, "rows": 12, "cost": "COST_REPLACED", "filtered": 100
}, "buffer_type": "flat", "buffer_size": "220", "join_type": "BNL", "attached_condition": "t.b = v.b or v.max_c > 20"
}
}
]
}
}
# extracted and formula : pushing into WHERE using equalities
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v_decimal as v,t2_decimal as t where
(v.a=v.b) and (v.b=t.b) and ((t.b>1) or (v.a=1));
a b avg_c a b c 1.01.016.33332.01.013 3.03.016.00003.03.016 3.03.016.00001.03.022 3.03.016.00001.03.014 1.01.016.33332.01.043 3.03.016.00002.03.011 3.03.016.00002.03.016
select * from v_decimal as v,t2_decimal as t where
(v.a=v.b) and (v.b=t.b) and ((t.b>1) or (v.a=1));
a b avg_c a b c 1.01.016.33332.01.013 3.03.016.00003.03.016 3.03.016.00001.03.022 3.03.016.00001.03.014 1.01.016.33332.01.043 3.03.016.00002.03.011 3.03.016.00002.03.016
explain select * from v_decimal as v,t2_decimal as t where
(v.a=v.b) and (v.b=t.b) and ((t.b>1) or (v.a=1));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key0 key0 6 test.t.b,test.t.b 1 2 DERIVED t1_decimal ALL NULL NULL NULL NULL 9 Using where; Using temporary; Using filesort
explain format=json select * from v_decimal as v,t2_decimal as t where
(v.a=v.b) and (v.b=t.b) and ((t.b>1) or (v.a=1));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "(t.b > 1 or t.b = 1) and t.b is not null and t.b is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "6", "used_key_parts": ["a", "b"], "ref": ["test.t.b", "test.t.b"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "avg_c > 12", "filesort": { "sort_key": "t1_decimal.a, t1_decimal.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1_decimal", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1_decimal.b = t1_decimal.a and (t1_decimal.a > 1 or t1_decimal.a = 1)"
}
}
]
}
}
}
}
}
}
]
}
}
# extracted or formula : pushing into HAVING using equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2
where ((t2.a<4) and (v1.a=t2.a)) or ((t2.c>150) and (v1.max_c=t2.c));
a b max_c avg_c a b c d 119107107.000012190912 119107107.0000119203107 121500234.600012190912 121500234.6000119203107 516207207.000023207207 620315279.3333620315279
select * from v1,t2
where ((t2.a<4) and (v1.a=t2.a)) or ((t2.c>150) and (v1.max_c=t2.c));
a b max_c avg_c a b c d 119107107.000012190912 119107107.0000119203107 121500234.600012190912 121500234.6000119203107 516207207.000023207207 620315279.3333620315279
explain select * from v1,t2
where ((t2.a<4) and (v1.a=t2.a)) or ((t2.c>150) and (v1.max_c=t2.c));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort
explain format=json select * from v1,t2
where ((t2.a<4) and (v1.a=t2.a)) or ((t2.c>150) and (v1.max_c=t2.c));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a < 4 or t2.c > 150"
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v1.a = t2.a and t2.a < 4 or v1.max_c = t2.c and t2.c > 150", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and (t1.a < 4 or max_c > 150)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
# conjunctive subformulas : pushing into WHERE and HAVING using equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2
where ((t2.a>5) and (v1.a=t2.a)) and ((t2.c>250) and (v1.max_c=t2.c));
a b max_c avg_c a b c d 620315279.3333620315279
select * from v1,t2
where ((t2.a>5) and (v1.a=t2.a)) and ((t2.c>250) and (v1.max_c=t2.c));
a b max_c avg_c a b c d 620315279.3333620315279
explain select * from v1,t2
where ((t2.a>5) and (v1.a=t2.a)) and ((t2.c>250) and (v1.max_c=t2.c));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key0 key0 10 test.t2.a,test.t2.c 2 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v1,t2
where ((t2.a>5) and (v1.a=t2.a)) and ((t2.c>250) and (v1.max_c=t2.c));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a > 5 and t2.c > 250 and t2.a is not null and t2.c is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "10", "used_key_parts": ["a", "max_c"], "ref": ["test.t2.a", "test.t2.c"], "loops": 9, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and max_c > 250", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5"
}
}
]
}
}
}
}
}
}
]
}
}
# conjunctive subformulas : pushing into WHERE and HAVING
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
group by a,b having max_c < 707) v1,
t2 where (v1.a=8) and (v1.a=t2.a) and (v1.max_c=404);
a b max_c avg_c a b c d 833404213.6667864248107 833404213.6667880800314
select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
group by a,b having max_c < 707) v1,
t2 where (v1.a=8) and (v1.a=t2.a) and (v1.max_c=404);
a b max_c avg_c a b c d 833404213.6667864248107 833404213.6667880800314
explain select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
group by a,b having max_c < 707) v1,
t2 where (v1.a=8) and (v1.a=t2.a) and (v1.max_c=404);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
group by a,b having max_c < 707) v1,
t2 where (v1.a=8) and (v1.a=t2.a) and (v1.max_c=404);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a = 8"
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a = 8 and v1.max_c = 404"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c = 404", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 8"
}
}
]
}
}
}
}
}
}
]
}
}
# conjunctive subformulas : pushing into WHERE and HAVING set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where
(v1.a>3) and (v1.max_c>200) and (t2.b<v1.b) and (t2.d=v1.max_c);
a b max_c avg_c a b c d 516207207.000023207207
select * from v1,t2 where
(v1.a>3) and (v1.max_c>200) and (t2.b<v1.b) and (t2.d=v1.max_c);
a b max_c avg_c a b c d 516207207.000023207207
explain select * from v1,t2 where
(v1.a>3) and (v1.max_c>200) and (t2.b<v1.b) and (t2.d=v1.max_c);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key0 key0 5 test.t2.d 2 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v1,t2 where
(v1.a>3) and (v1.max_c>200) and (t2.b<v1.b) and (t2.d=v1.max_c);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.d is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["max_c"], "ref": ["test.t2.d"], "loops": 9, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a > 3 and v1.max_c > 200 and t2.b < v1.b and t2.d = v1.max_c", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and max_c > 200", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 3"
}
}
]
}
}
}
}
}
}
]
}
}
# conjunctive subformula : pushing into WHERE
# extracted or formula : pushing into HAVING using equalities
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v_double as v,t2_double as t where
(v.b=v.c) and (v.c=t.c) and ((t.c>10) or (v.a=1));
a avg_a b c a b c
select * from v_double as v,t2_double as t where
(v.b=v.c) and (v.c=t.c) and ((t.c>10) or (v.a=1));
a avg_a b c a b c
explain select * from v_double as v,t2_double as t where
(v.b=v.c) and (v.c=t.c) and ((t.c>10) or (v.a=1));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key0 key0 18 test.t.c,test.t.c 1 Using where 2 DERIVED t1_double ALL NULL NULL NULL NULL 9 Using where; Using temporary; Using filesort
explain format=json select * from v_double as v,t2_double as t where
(v.b=v.c) and (v.c=t.c) and ((t.c>10) or (v.a=1));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t.c is not null and t.c is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "18", "used_key_parts": ["b", "c"], "ref": ["test.t.c", "test.t.c"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t.c > 10 or v.a = 1", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "avg_a < 22.333 and (t1_double.b > 10 or t1_double.a = 1)", "filesort": { "sort_key": "t1_double.b, t1_double.c", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1_double", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1_double.c = t1_double.b and t1_double.b > 12.2"
}
}
]
}
}
}
}
}
}
]
}
}
# conjunctive subformula : pushing into WHERE
# extracted or formula : pushing into HAVING using equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v_double as v,t2_double as t where
(((v.a>0.2) or (v.b<17)) or (t.c>17)) and (t.c=v.c) and (v.c>18);
a avg_a b c a b c 10.5000000012.518.9112.518.9 10.5000000012.518.9222.418.9 10.5000000012.518.9717.8918.9
select * from v_double as v,t2_double as t where
(((v.a>0.2) or (v.b<17)) or (t.c>17)) and (t.c=v.c) and (v.c>18);
a avg_a b c a b c 10.5000000012.518.9112.518.9 10.5000000012.518.9222.418.9 10.5000000012.518.9717.8918.9
explain select * from v_double as v,t2_double as t where
(((v.a>0.2) or (v.b<17)) or (t.c>17)) and (t.c=v.c) and (v.c>18);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key0 key0 9 test.t.c 1 Using where 2 DERIVED t1_double ALL NULL NULL NULL NULL 9 Using where; Using temporary; Using filesort
explain format=json select * from v_double as v,t2_double as t where
(((v.a>0.2) or (v.b<17)) or (t.c>17)) and (t.c=v.c) and (v.c>18);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t.c > 18 and t.c is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "9", "used_key_parts": ["c"], "ref": ["test.t.c"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v.a > 0.2 or v.b < 17 or t.c > 17", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "avg_a < 22.333 and (t1_double.a > 0.2 or t1_double.b < 17 or t1_double.c > 17)", "filesort": { "sort_key": "t1_double.b, t1_double.c", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1_double", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1_double.b > 12.2 and t1_double.c > 18"
}
}
]
}
}
}
}
}
}
]
}
}
# extracted or formula : pushing into WHERE
# conjunctive subformula : pushing into HAVING
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v_decimal as v,t2_decimal as t where
(((v.a>4) or (v.a=2)) or (v.b>3)) and (v.avg_c=13);
a b avg_c a b c 2.01.013.00002.01.013 2.03.013.00002.01.013 2.01.013.00002.02.011 2.03.013.00002.02.011 2.01.013.00003.03.016 2.03.013.00003.03.016 2.01.013.00001.03.022 2.03.013.00001.03.022 2.01.013.00001.03.014 2.03.013.00001.03.014 2.01.013.00002.02.015 2.03.013.00002.02.015 2.01.013.00002.01.043 2.03.013.00002.01.043 2.01.013.00002.03.011 2.03.013.00002.03.011 2.01.013.00002.03.016 2.03.013.00002.03.016
select * from v_decimal as v,t2_decimal as t where
(((v.a>4) or (v.a=2)) or (v.b>3)) and (v.avg_c=13);
a b avg_c a b c 2.01.013.00002.01.013 2.03.013.00002.01.013 2.01.013.00002.02.011 2.03.013.00002.02.011 2.01.013.00003.03.016 2.03.013.00003.03.016 2.01.013.00001.03.022 2.03.013.00001.03.022 2.01.013.00001.03.014 2.03.013.00001.03.014 2.01.013.00002.02.015 2.03.013.00002.02.015 2.01.013.00002.01.043 2.03.013.00002.01.043 2.01.013.00002.03.011 2.03.013.00002.03.011 2.01.013.00002.03.016 2.03.013.00002.03.016
explain select * from v_decimal as v,t2_decimal as t where
(((v.a>4) or (v.a=2)) or (v.b>3)) and (v.avg_c=13);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY t ALL NULL NULL NULL NULL 9 Using join buffer (flat, BNL join) 2 DERIVED t1_decimal ALL NULL NULL NULL NULL 9 Using where; Using temporary; Using filesort
explain format=json select * from v_decimal as v,t2_decimal as t where
(((v.a>4) or (v.a=2)) or (v.b>3)) and (v.avg_c=13);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "(v.a > 4 or v.a = 2 or v.b > 3) and v.avg_c = 13", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "avg_c > 12 and avg_c = 13", "filesort": { "sort_key": "t1_decimal.a, t1_decimal.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1_decimal", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1_decimal.a > 4 or t1_decimal.a = 2 or t1_decimal.b > 3"
}
}
]
}
}
}
}
}
},
{ "block-nl-join": { "table": { "table_name": "t", "access_type": "ALL", "loops": 9, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}, "buffer_type": "flat", "buffer_size": "162", "join_type": "BNL"
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
where t1.a>5 group by a,b having max_c < 707) v1,
t2 where (v1.a=t2.a) and (v1.max_c>300) and (v1.a=v1.b);
a b max_c avg_c a b c d
select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
where t1.a>5 group by a,b having max_c < 707) v1,
t2 where (v1.a=t2.a) and (v1.max_c>300) and (v1.a=v1.b);
a b max_c avg_c a b c d
explain select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
where t1.a>5 group by a,b having max_c < 707) v1,
t2 where (v1.a=t2.a) and (v1.max_c>300) and (v1.a=v1.b);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key0 key0 10 test.t2.a,test.t2.a 1 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
where t1.a>5 group by a,b having max_c < 707) v1,
t2 where (v1.a=t2.a) and (v1.max_c>300) and (v1.a=v1.b);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null and t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "10", "used_key_parts": ["a", "b"], "ref": ["test.t2.a", "test.t2.a"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.max_c > 300", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and max_c > 300", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b = t1.a and t1.a > 5"
}
}
]
}
}
}
}
}
}
]
}
}
# nothing to push set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (t2.a<2) and (t2.c>900);
a b max_c avg_c a b c d 119107107.000012190912 121500234.600012190912 516207207.000012190912 527132132.000012190912 620315279.333312190912 833404213.666712190912
select * from v1,t2 where (t2.a<2) and (t2.c>900);
a b max_c avg_c a b c d 119107107.000012190912 121500234.600012190912 516207207.000012190912 527132132.000012190912 620315279.333312190912 833404213.666712190912
explain select * from v1,t2 where (t2.a<2) and (t2.c>900);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort
explain format=json select * from v1,t2 where (t2.a<2) and (t2.c>900);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a < 2 and t2.c > 900"
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=t2.a) and (v1.b=t2.b);
a b max_c avg_c a b c d 121500234.600012190912 620315279.3333620315279 119107107.0000119203107
select * from v1,t2 where (v1.a=t2.a) and (v1.b=t2.b);
a b max_c avg_c a b c d 121500234.600012190912 620315279.3333620315279 119107107.0000119203107
explain select * from v1,t2 where (v1.a=t2.a) and (v1.b=t2.b);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key0 key0 10 test.t2.a,test.t2.b 1 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort
explain format=json select * from v1,t2 where (v1.a=t2.a) and (v1.b=t2.b);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null and t2.b is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "10", "used_key_parts": ["a", "b"], "ref": ["test.t2.a", "test.t2.b"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where
(t2.a=v1.a) or (v1.b=t2.b) and ((v1.a=1) or (v1.a=6));
a b max_c avg_c a b c d 119107107.000012190912 119107107.0000119203107 121500234.600012190912 121500234.6000119203107 620315279.3333620315279 620315279.3333623303909 833404213.6667864248107 833404213.6667880800314
select * from v1,t2 where
(t2.a=v1.a) or (v1.b=t2.b) and ((v1.a=1) or (v1.a=6));
a b max_c avg_c a b c d 119107107.000012190912 119107107.0000119203107 121500234.600012190912 121500234.6000119203107 620315279.3333620315279 620315279.3333623303909 833404213.6667864248107 833404213.6667880800314
explain select * from v1,t2 where
(t2.a=v1.a) or (v1.b=t2.b) and ((v1.a=1) or (v1.a=6));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort
explain format=json select * from v1,t2 where
(t2.a=v1.a) or (v1.b=t2.b) and ((v1.a=1) or (v1.a=6));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v1.a = t2.a or v1.b = t2.b and (v1.a = 1 or v1.a = 6)", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=1) or (v1.b=21) or (t2.a=2);
a b max_c avg_c a b c d 119107107.000023207207 119107107.000012190912 119107107.0000713312406 119107107.0000864248107 119107107.0000620315279 119107107.0000119203107 119107107.0000880800314 119107107.0000312231190 119107107.0000623303909 121500234.600023207207 121500234.600012190912 121500234.6000713312406 121500234.6000864248107 121500234.6000620315279 121500234.6000119203107 121500234.6000880800314 121500234.6000312231190 121500234.6000623303909 516207207.000023207207 527132132.000023207207 620315279.333323207207 833404213.666723207207
select * from v1,t2 where (v1.a=1) or (v1.b=21) or (t2.a=2);
a b max_c avg_c a b c d 119107107.000023207207 119107107.000012190912 119107107.0000713312406 119107107.0000864248107 119107107.0000620315279 119107107.0000119203107 119107107.0000880800314 119107107.0000312231190 119107107.0000623303909 121500234.600023207207 121500234.600012190912 121500234.6000713312406 121500234.6000864248107 121500234.6000620315279 121500234.6000119203107 121500234.6000880800314 121500234.6000312231190 121500234.6000623303909 516207207.000023207207 527132132.000023207207 620315279.333323207207 833404213.666723207207
explain select * from v1,t2 where (v1.a=1) or (v1.b=21) or (t2.a=2);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort
explain format=json select * from v1,t2 where (v1.a=1) or (v1.b=21) or (t2.a=2);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v1.a = 1 or v1.b = 21 or t2.a = 2", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where
(t2.a<2) and (t2.c>900) and ((v1.a<t2.a) or (t2.a<11));
a b max_c avg_c a b c d 119107107.000012190912 121500234.600012190912 516207207.000012190912 527132132.000012190912 620315279.333312190912 833404213.666712190912
select * from v1,t2 where
(t2.a<2) and (t2.c>900) and ((v1.a<t2.a) or (t2.a<11));
a b max_c avg_c a b c d 119107107.000012190912 121500234.600012190912 516207207.000012190912 527132132.000012190912 620315279.333312190912 833404213.666712190912
explain select * from v1,t2 where
(t2.a<2) and (t2.c>900) and ((v1.a<t2.a) or (t2.a<11));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort
explain format=json select * from v1,t2 where
(t2.a<2) and (t2.c>900) and ((v1.a<t2.a) or (t2.a<11));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a < 2 and t2.c > 900"
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v1.a < t2.a or t2.a < 11", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
# using several derived tables : nothing to push set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,v2,t2 where
(v1.a=v2.a) and (v1.a=t2.a) and (v2.b<50);
a b max_c avg_c a b max_c avg_c a b c d 833404213.6667833404213.6667864248107 620315279.3333620315279.3333620315279 833404213.6667833404213.6667880800314 620315279.3333620315279.3333623303909
select * from v1,v2,t2 where
(v1.a=v2.a) and (v1.a=t2.a) and (v2.b<50);
a b max_c avg_c a b max_c avg_c a b c d 833404213.6667833404213.6667864248107 620315279.3333620315279.3333620315279 833404213.6667833404213.6667880800314 620315279.3333620315279.3333623303909
explain select * from v1,v2,t2 where
(v1.a=v2.a) and (v1.a=t2.a) and (v2.b<50);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1 key1 5 test.t2.a 2 1 PRIMARY <derived3> ref key0 key0 5 test.t2.a 2 Using where 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort
explain format=json select * from v1,v2,t2 where
(v1.a=v2.a) and (v1.a=t2.a) and (v2.b<50);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null and t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
},
{ "table": { "table_name": "<derived3>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 18, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v2.b < 50", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5 and t1.b < 50"
}
}
]
}
}
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,v2,t2 where
((v1.a=v2.a) or (v1.a=t2.a)) and (t2.b<50) and (v1.b=v2.b);
a b max_c avg_c a b max_c avg_c a b c d 620315279.3333620315279.333323207207 833404213.6667833404213.666723207207 620315279.3333620315279.333312190912 833404213.6667833404213.666712190912 620315279.3333620315279.3333713312406 833404213.6667833404213.6667713312406 620315279.3333620315279.3333620315279 833404213.6667833404213.6667620315279 620315279.3333620315279.3333119203107 833404213.6667833404213.6667119203107 620315279.3333620315279.3333312231190 833404213.6667833404213.6667312231190 620315279.3333620315279.3333623303909 833404213.6667833404213.6667623303909
select * from v1,v2,t2 where
((v1.a=v2.a) or (v1.a=t2.a)) and (t2.b<50) and (v1.b=v2.b);
a b max_c avg_c a b max_c avg_c a b c d 620315279.3333620315279.333323207207 833404213.6667833404213.666723207207 620315279.3333620315279.333312190912 833404213.6667833404213.666712190912 620315279.3333620315279.3333713312406 833404213.6667833404213.6667713312406 620315279.3333620315279.3333620315279 833404213.6667833404213.6667620315279 620315279.3333620315279.3333119203107 833404213.6667833404213.6667119203107 620315279.3333620315279.3333312231190 833404213.6667833404213.6667312231190 620315279.3333620315279.3333623303909 833404213.6667833404213.6667623303909
explain select * from v1,v2,t2 where
((v1.a=v2.a) or (v1.a=t2.a)) and (t2.b<50) and (v1.b=v2.b);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where 1 PRIMARY <derived3> ref key0 key0 5 v1.b 2 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where; Using join buffer (flat, BNL join) 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort
explain format=json select * from v1,v2,t2 where
((v1.a=v2.a) or (v1.a=t2.a)) and (t2.b<50) and (v1.b=v2.b);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.b is not null", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
},
{ "table": { "table_name": "<derived3>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["b"], "ref": ["v1.b"], "loops": 20, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5"
}
}
]
}
}
}
}
}
},
{ "block-nl-join": { "table": { "table_name": "t2", "access_type": "ALL", "loops": 40, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.b < 50"
}, "buffer_type": "flat", "buffer_size": "1KiB", "join_type": "BNL", "attached_condition": "v2.a = v1.a or t2.a = v1.a"
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,v2,t2 where
((v1.a=v2.a) and (v1.a=t2.a)) or ((v2.b>13) and (t2.c<115));
a b max_c avg_c a b max_c avg_c a b c d 620315279.3333620315279.3333620315279 620315279.3333620315279.3333623303909 833404213.6667833404213.6667864248107 833404213.6667833404213.6667880800314
select * from v1,v2,t2 where
((v1.a=v2.a) and (v1.a=t2.a)) or ((v2.b>13) and (t2.c<115));
a b max_c avg_c a b max_c avg_c a b c d 620315279.3333620315279.3333620315279 620315279.3333620315279.3333623303909 833404213.6667833404213.6667864248107 833404213.6667833404213.6667880800314
explain select * from v1,v2,t2 where
((v1.a=v2.a) and (v1.a=t2.a)) or ((v2.b>13) and (t2.c<115));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 1 PRIMARY <derived3> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (incremental, BNL join) 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort
explain format=json select * from v1,v2,t2 where
((v1.a=v2.a) and (v1.a=t2.a)) or ((v2.b>13) and (t2.c<115));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v1.a = t2.a or t2.c < 115", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
},
{ "block-nl-join": { "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 180, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}, "buffer_type": "incremental", "buffer_size": "4KiB", "join_type": "BNL", "attached_condition": "v1.a = t2.a and v2.a = t2.a or v2.b > 13 and t2.c < 115", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5"
}
}
]
}
}
}
}
}
}
]
}
}
# using several derived tables : pushing in all tables
# conjunctive subformula : pushing into HAVING
# extracted or formula : pushing into WHERE
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,v2,t2 where ((v1.a=v2.a) or (v1.a=t2.a)) and
((v2.b<50) or (v2.b=19)) and (v1.max_c<300);
a b max_c avg_c a b max_c avg_c a b c d 119107107.0000620315279.333312190912 119107107.0000620315279.3333119203107 119107107.0000833404213.666712190912 119107107.0000833404213.6667119203107
select * from v1,v2,t2 where ((v1.a=v2.a) or (v1.a=t2.a)) and
((v2.b<50) or (v2.b=19)) and (v1.max_c<300);
a b max_c avg_c a b max_c avg_c a b c d 119107107.0000620315279.333312190912 119107107.0000620315279.3333119203107 119107107.0000833404213.666712190912 119107107.0000833404213.6667119203107
explain select * from v1,v2,t2 where ((v1.a=v2.a) or (v1.a=t2.a)) and
((v2.b<50) or (v2.b=19)) and (v1.max_c<300);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 1 PRIMARY <derived3> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (incremental, BNL join) 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort
explain format=json select * from v1,v2,t2 where ((v1.a=v2.a) or (v1.a=t2.a)) and
((v2.b<50) or (v2.b=19)) and (v1.max_c<300);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.max_c < 300"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and max_c < 300", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
},
{ "block-nl-join": { "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 180, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v2.b < 50 or v2.b = 19"
}, "buffer_type": "incremental", "buffer_size": "4KiB", "join_type": "BNL", "attached_condition": "(v2.a = v1.a or v1.a = t2.a) and (v2.b < 50 or v2.b = 19)", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5 and (t1.b < 50 or t1.b = 19)"
}
}
]
}
}
}
}
}
}
]
}
}
# using several derived tables : pushing only in one table
# conjunctive subformula : pushing into WHERE
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,v2,t2 where
(v1.a=t2.a) and (v1.a=v1.b) and (v1.a=v2.a) and (v2.max_c<300);
a b max_c avg_c a b max_c avg_c a b c d
select * from v1,v2,t2 where
(v1.a=t2.a) and (v1.a=v1.b) and (v1.a=v2.a) and (v2.max_c<300);
a b max_c avg_c a b max_c avg_c a b c d
explain select * from v1,v2,t2 where
(v1.a=t2.a) and (v1.a=v1.b) and (v1.a=v2.a) and (v2.max_c<300);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1 key1 10 test.t2.a,test.t2.a 1 1 PRIMARY <derived3> ref key0 key0 5 test.t2.a 2 Using where 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v1,v2,t2 where
(v1.a=t2.a) and (v1.a=v1.b) and (v1.a=v2.a) and (v2.max_c<300);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null and t2.a is not null and t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1"], "key": "key1", "key_length": "10", "used_key_parts": ["a", "b"], "ref": ["test.t2.a", "test.t2.a"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b = t1.a"
}
}
]
}
}
}
}
}
},
{ "table": { "table_name": "<derived3>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v2.max_c < 300", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and max_c < 300", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5"
}
}
]
}
}
}
}
}
}
]
}
}
# using several derived tables : pushing only in one table
# extracted and formula : pushing into WHERE
# conjunctive subformula : pushing into WHERE using equalities
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,v2,t2 where (v1.a=1) and (v1.b>10) and (v1.b=v2.b);
a b max_c avg_c a b max_c avg_c a b c d
select * from v1,v2,t2 where (v1.a=1) and (v1.b>10) and (v1.b=v2.b);
a b max_c avg_c a b max_c avg_c a b c d
explain select * from v1,v2,t2 where (v1.a=1) and (v1.b>10) and (v1.b=v2.b);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where 1 PRIMARY <derived3> ref key0 key0 5 v1.b 2 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using join buffer (flat, BNL join) 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v1,v2,t2 where (v1.a=1) and (v1.b>10) and (v1.b=v2.b);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a = 1 and v1.b > 10 and v1.b is not null", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 1 and t1.b > 10"
}
}
]
}
}
}
}
}
},
{ "table": { "table_name": "<derived3>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["b"], "ref": ["v1.b"], "loops": 20, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5 and t1.b > 10"
}
}
]
}
}
}
}
}
},
{ "block-nl-join": { "table": { "table_name": "t2", "access_type": "ALL", "loops": 40, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}, "buffer_type": "flat", "buffer_size": "1KiB", "join_type": "BNL"
}
}
]
}
}
# extracted or formula : pushing into WHERE
# conjunctive subformula : pushing into WHERE using equalities
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v_char as v,t2_char as t where
(v.a=t.a) and (t.a='b') and ((v.b='Vika') or (v.b='Ali'));
a b max_c a b c
b Vika 2 b Ivan 1
b Vika 2 b Ali 6
b Vika 2 b Hermes 3
b Vika 2 b Ivan 11
b Vika 2 b Harry 4
select * from v_char as v,t2_char as t where
(v.a=t.a) and (t.a='b') and ((v.b='Vika') or (v.b='Ali'));
a b max_c a b c
b Vika 2 b Ivan 1
b Vika 2 b Ali 6
b Vika 2 b Hermes 3
b Vika 2 b Ivan 11
b Vika 2 b Harry 4
explain select * from v_char as v,t2_char as t where
(v.a=t.a) and (t.a='b') and ((v.b='Vika') or (v.b='Ali'));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 12 Using where 1 PRIMARY t ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1_char ALL NULL NULL NULL NULL 12 Using where; Using temporary; Using filesort
explain format=json select * from v_char as v,t2_char as t where
(v.a=t.a) and (t.a='b') and ((v.b='Vika') or (v.b='Ali'));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 12, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v.a = 'b' and (v.b = 'Vika' or v.b = 'Ali')", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 9", "filesort": { "sort_key": "t1_char.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1_char", "access_type": "ALL", "loops": 1, "rows": 12, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1_char.a = 'b' and (t1_char.b = 'Vika' or t1_char.b = 'Ali')"
}
}
]
}
}
}
}
}
},
{ "block-nl-join": { "table": { "table_name": "t", "access_type": "ALL", "loops": 12, "rows": 12, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t.a = 'b'"
}, "buffer_type": "flat", "buffer_size": "220", "join_type": "BNL"
}
}
]
}
}
# using several derived tables : pushing in all tables
# extracted or formula : pushing into WHERE
# conjunctive subformulas : pushing into HAVING
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,v2,v3,t2 where
((v1.a=v2.a) or (v1.a=t2.a)) and ((v3.b<50) or (v3.b=33)) and (v1.max_c<500) and (v3.a=t2.a) and (v2.max_c>300);
a b max_c avg_c a b max_c avg_c a b min_c a b c d 620315279.3333620315279.3333711708713312406 620315279.3333620315279.3333833114864248107 620315279.3333620315279.3333620214620315279 620315279.3333620315279.3333833114880800314 620315279.3333620315279.3333620214623303909 833404213.6667620315279.3333833114864248107 833404213.6667620315279.3333833114880800314 620315279.3333833404213.6667620214620315279 620315279.3333833404213.6667620214623303909 833404213.6667833404213.6667711708713312406 833404213.6667833404213.6667833114864248107 833404213.6667833404213.6667620214620315279 833404213.6667833404213.6667833114880800314 833404213.6667833404213.6667620214623303909
select * from v1,v2,v3,t2 where
((v1.a=v2.a) or (v1.a=t2.a)) and ((v3.b<50) or (v3.b=33)) and (v1.max_c<500) and (v3.a=t2.a) and (v2.max_c>300);
a b max_c avg_c a b max_c avg_c a b min_c a b c d 620315279.3333620315279.3333711708713312406 620315279.3333620315279.3333833114864248107 620315279.3333620315279.3333620214620315279 620315279.3333620315279.3333833114880800314 620315279.3333620315279.3333620214623303909 833404213.6667620315279.3333833114864248107 833404213.6667620315279.3333833114880800314 620315279.3333833404213.6667620214620315279 620315279.3333833404213.6667620214623303909 833404213.6667833404213.6667711708713312406 833404213.6667833404213.6667833114864248107 833404213.6667833404213.6667620214620315279 833404213.6667833404213.6667833114880800314 833404213.6667833404213.6667620214623303909
explain select * from v1,v2,v3,t2 where
((v1.a=v2.a) or (v1.a=t2.a)) and ((v3.b<50) or (v3.b=33)) and (v1.max_c<500) and (v3.a=t2.a) and (v2.max_c>300);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived4> ref key0 key0 5 test.t2.a 2 Using where 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 1 PRIMARY <derived3> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (incremental, BNL join) 4 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort
explain format=json select * from v1,v2,v3,t2 where
((v1.a=v2.a) or (v1.a=t2.a)) and ((v3.b<50) or (v3.b=33)) and (v1.max_c<500) and (v3.a=t2.a) and (v2.max_c>300);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null"
}
},
{ "table": { "table_name": "<derived4>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v3.b < 50 or v3.b = 33", "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "having_condition": "min_c > 109", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 10 and (t1.b < 50 or t1.b = 33)"
}
}
]
}
}
}
}
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 18, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.max_c < 500"
}, "buffer_type": "flat", "buffer_size": "715", "join_type": "BNL", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and max_c < 500", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
},
{ "block-nl-join": { "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 360, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v2.max_c > 300"
}, "buffer_type": "incremental", "buffer_size": "9KiB", "join_type": "BNL", "attached_condition": "v2.a = v1.a or v1.a = t2.a", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and max_c > 300", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5"
}
}
]
}
}
}
}
}
}
]
}
}
# using several derived tables : pushing in all tables
# conjunctive subformulas : pushing into HAVING set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
where t1.a>5 group by a,b having max_c < 707) v1,
(select a, b, min(c) as min_c from t1
where t1.a>5 group by a,b having min_c < 707) v2,
t2 where (v1.a=v2.a) and (v1.b=t2.b) and (v1.max_c>130) and (v2.min_c<130);
a b max_c avg_c a b min_c a b c d
select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
where t1.a>5 group by a,b having max_c < 707) v1,
(select a, b, min(c) as min_c from t1
where t1.a>5 group by a,b having min_c < 707) v2,
t2 where (v1.a=v2.a) and (v1.b=t2.b) and (v1.max_c>130) and (v2.min_c<130);
a b max_c avg_c a b min_c a b c d
explain select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
where t1.a>5 group by a,b having max_c < 707) v1,
(select a, b, min(c) as min_c from t1
where t1.a>5 group by a,b having min_c < 707) v2,
t2 where (v1.a=v2.a) and (v1.b=t2.b) and (v1.max_c>130) and (v2.min_c<130);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1 key1 5 test.t2.b 2 Using where 1 PRIMARY <derived3> ref key0 key0 5 v1.a 2 Using where 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
where t1.a>5 group by a,b having max_c < 707) v1,
(select a, b, min(c) as min_c from t1
where t1.a>5 group by a,b having min_c < 707) v2,
t2 where (v1.a=v2.a) and (v1.b=t2.b) and (v1.max_c>130) and (v2.min_c<130);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.b is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1"], "key": "key1", "key_length": "5", "used_key_parts": ["b"], "ref": ["test.t2.b"], "loops": 9, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.max_c > 130 and v1.a is not null", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and max_c > 130", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5"
}
}
]
}
}
}
}
}
},
{ "table": { "table_name": "<derived3>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["a"], "ref": ["v1.a"], "loops": 18, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v2.min_c < 130", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "min_c < 707 and min_c < 130", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5"
}
}
]
}
}
}
}
}
}
]
}
}
# using several derived tables : pushing in all tables
# extracted or formulas : pushing into HAVING
# conjunctive subformula : pushing into HAVING set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
where t1.a>5 group by a,b having max_c < 707) v1,
(select a, b, min(c) as min_c from t1
where t1.a>5 group by a,b having min_c < 707) v2,
(select a, b, avg(c) as avg_c from t1
where t1.a<8 group by a,b) v3,
t2 where (v1.a=v2.a) and (v1.b=v3.b) and ((v3.avg_c>170) or (v3.a<5)) and ((v1.avg_c<400) or (v1.a>1)) and (v2.min_c<200);
a b max_c avg_c a b min_c a b avg_c a b c d 833404213.6667833114133497.500023207207 833404213.6667833114133497.500012190912 833404213.6667833114133497.5000713312406 833404213.6667833114133497.5000864248107 833404213.6667833114133497.5000620315279 833404213.6667833114133497.5000119203107 833404213.6667833114133497.5000880800314 833404213.6667833114133497.5000312231190 833404213.6667833114133497.5000623303909
select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
where t1.a>5 group by a,b having max_c < 707) v1,
(select a, b, min(c) as min_c from t1
where t1.a>5 group by a,b having min_c < 707) v2,
(select a, b, avg(c) as avg_c from t1
where t1.a<8 group by a,b) v3,
t2 where (v1.a=v2.a) and (v1.b=v3.b) and ((v3.avg_c>170) or (v3.a<5)) and ((v1.avg_c<400) or (v1.a>1)) and (v2.min_c<200);
a b max_c avg_c a b min_c a b avg_c a b c d 833404213.6667833114133497.500023207207 833404213.6667833114133497.500012190912 833404213.6667833114133497.5000713312406 833404213.6667833114133497.5000864248107 833404213.6667833114133497.5000620315279 833404213.6667833114133497.5000119203107 833404213.6667833114133497.5000880800314 833404213.6667833114133497.5000312231190 833404213.6667833114133497.5000623303909
explain select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
where t1.a>5 group by a,b having max_c < 707) v1,
(select a, b, min(c) as min_c from t1
where t1.a>5 group by a,b having min_c < 707) v2,
(select a, b, avg(c) as avg_c from t1
where t1.a<8 group by a,b) v3,
t2 where (v1.a=v2.a) and (v1.b=v3.b) and ((v3.avg_c>170) or (v3.a<5)) and ((v1.avg_c<400) or (v1.a>1)) and (v2.min_c<200);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where 1 PRIMARY <derived3> ref key0 key0 5 v1.a 2 Using where 1 PRIMARY <derived4> ref key0 key0 5 v1.b 2 Using where 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using join buffer (flat, BNL join) 4 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
where t1.a>5 group by a,b having max_c < 707) v1,
(select a, b, min(c) as min_c from t1
where t1.a>5 group by a,b having min_c < 707) v2,
(select a, b, avg(c) as avg_c from t1
where t1.a<8 group by a,b) v3,
t2 where (v1.a=v2.a) and (v1.b=v3.b) and ((v3.avg_c>170) or (v3.a<5)) and ((v1.avg_c<400) or (v1.a>1)) and (v2.min_c<200);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "(v1.avg_c < 400 or v1.a > 1) and v1.a is not null and v1.b is not null", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and (avg_c < 400 or t1.a > 1)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5"
}
}
]
}
}
}
}
}
},
{ "table": { "table_name": "<derived3>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["a"], "ref": ["v1.a"], "loops": 20, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v2.min_c < 200", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "min_c < 707 and min_c < 200", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5"
}
}
]
}
}
}
}
}
},
{ "table": { "table_name": "<derived4>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["b"], "ref": ["v1.b"], "loops": 40, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v3.avg_c > 170 or v3.a < 5", "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "having_condition": "avg_c > 170 or t1.a < 5", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 8"
}
}
]
}
}
}
}
}
},
{ "block-nl-join": { "table": { "table_name": "t2", "access_type": "ALL", "loops": 80, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}, "buffer_type": "flat", "buffer_size": "4KiB", "join_type": "BNL"
}
}
]
}
}
# extracted or formula : pushing into HAVING
# conjunctive subformula : pushing into WHERE set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
group by a,b having max_c < 707) v1,
t2 where ((v1.a=1) or (v1.max_c<300)) and (v1.b>25);
a b max_c avg_c a b c d 527132132.000023207207 527132132.000012190912 527132132.0000713312406 527132132.0000864248107 527132132.0000620315279 527132132.0000119203107 527132132.0000880800314 527132132.0000312231190 527132132.0000623303909
select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
group by a,b having max_c < 707) v1,
t2 where ((v1.a=1) or (v1.max_c<300)) and (v1.b>25);
a b max_c avg_c a b c d 527132132.000023207207 527132132.000012190912 527132132.0000713312406 527132132.0000864248107 527132132.0000620315279 527132132.0000119203107 527132132.0000880800314 527132132.0000312231190 527132132.0000623303909
explain select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
group by a,b having max_c < 707) v1,
t2 where ((v1.a=1) or (v1.max_c<300)) and (v1.b>25);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
group by a,b having max_c < 707) v1,
t2 where ((v1.a=1) or (v1.max_c<300)) and (v1.b>25);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "(v1.a = 1 or v1.max_c < 300) and v1.b > 25"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v1.a = 1 or v1.max_c < 300", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and (t1.a = 1 or max_c < 300)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 25"
}
}
]
}
}
}
}
}
}
]
}
}
# extracted and formula : pushing into WHERE
# conjunctive subformula : pushing into HAVING set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
where t1.a>5 group by a,b having max_c < 707) v1,
t2 where (v1.a=t2.a) and (v1.max_c>300) and (v1.b<30);
a b max_c avg_c a b c d 620315279.3333620315279 620315279.3333623303909
select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
where t1.a>5 group by a,b having max_c < 707) v1,
t2 where (v1.a=t2.a) and (v1.max_c>300) and (v1.b<30);
a b max_c avg_c a b c d 620315279.3333620315279 620315279.3333623303909
explain select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
where t1.a>5 group by a,b having max_c < 707) v1,
t2 where (v1.a=t2.a) and (v1.max_c>300) and (v1.b<30);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key0 key0 5 test.t2.a 2 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from
(select a, b, max(c) as max_c, avg(c) as avg_c from t1
where t1.a>5 group by a,b having max_c < 707) v1,
t2 where (v1.a=t2.a) and (v1.max_c>300) and (v1.b<30);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.max_c > 300 and v1.b < 30", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and max_c > 300", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5 and t1.b < 30"
}
}
]
}
}
}
}
}
}
]
}
}
# using query with union
# conjunctive subformula : pushing into WHERE
# conjunctive subformulas : pushing into HAVING and WHERE set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a<5) and (v1.b=t2.b) and (t2.c>800)
union
select * from v1,t2 where (v1.max_c>100) and (v1.a>7) and (t2.d>800);
a b max_c avg_c a b c d 121500234.600012190912 833404213.6667623303909
select * from v1,t2 where (v1.a<5) and (v1.b=t2.b) and (t2.c>800)
union
select * from v1,t2 where (v1.max_c>100) and (v1.a>7) and (t2.d>800);
a b max_c avg_c a b c d 121500234.600012190912 833404213.6667623303909
explain select * from v1,t2 where (v1.a<5) and (v1.b=t2.b) and (t2.c>800)
union
select * from v1,t2 where (v1.max_c>100) and (v1.a>7) and (t2.d>800);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived3> ref key0 key0 5 test.t2.b 2 Using where 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 UNION t2 ALL NULL NULL NULL NULL 9 Using where 2 UNION <derived4> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 4 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
NULL UNION RESULT <union1,2> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where (v1.a<5) and (v1.b=t2.b) and (t2.c>800)
union
select * from v1,t2 where (v1.max_c>100) and (v1.a>7) and (t2.d>800);
EXPLAIN
{ "query_block": { "union_result": { "table_name": "<union1,2>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.c > 800 and t2.b is not null"
}
},
{ "table": { "table_name": "<derived3>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["b"], "ref": ["test.t2.b"], "loops": 9, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a < 5", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 5"
}
}
]
}
}
}
}
}
}
]
}
},
{ "query_block": { "select_id": 2, "operation": "UNION", "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.d > 800"
}
},
{ "block-nl-join": { "table": { "table_name": "<derived4>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.max_c > 100 and v1.a > 7"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and max_c > 100", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 7"
}
}
]
}
}
}
}
}
}
]
}
}
]
}
}
}
# using query with union
# extracted and formula : pushing into WHERE
# extracted or formula : pushing into HAVING
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a<5) and (v1.b=t2.b) and (v1.b=19)
union
select * from v1,t2 where ((v1.max_c>400) or (v1.avg_c>270)) and (v1.a<t2.a);
a b max_c avg_c a b c d 119107107.0000119203107 121500234.600023207207 121500234.6000713312406 121500234.6000864248107 121500234.6000620315279 121500234.6000880800314 121500234.6000312231190 121500234.6000623303909 620315279.3333713312406 620315279.3333864248107 620315279.3333880800314
select * from v1,t2 where (v1.a<5) and (v1.b=t2.b) and (v1.b=19)
union
select * from v1,t2 where ((v1.max_c>400) or (v1.avg_c>270)) and (v1.a<t2.a);
a b max_c avg_c a b c d 119107107.0000119203107 121500234.600023207207 121500234.6000713312406 121500234.6000864248107 121500234.6000620315279 121500234.6000880800314 121500234.6000312231190 121500234.6000623303909 620315279.3333713312406 620315279.3333864248107 620315279.3333880800314
explain select * from v1,t2 where (v1.a<5) and (v1.b=t2.b) and (v1.b=19)
union
select * from v1,t2 where ((v1.max_c>400) or (v1.avg_c>270)) and (v1.a<t2.a);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived3> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 UNION t2 ALL NULL NULL NULL NULL 9 2 UNION <derived4> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 4 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort
NULL UNION RESULT <union1,2> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where (v1.a<5) and (v1.b=t2.b) and (v1.b=19)
union
select * from v1,t2 where ((v1.max_c>400) or (v1.avg_c>270)) and (v1.a<t2.a);
EXPLAIN
{ "query_block": { "union_result": { "table_name": "<union1,2>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.b = 19"
}
},
{ "block-nl-join": { "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.b = 19 and v1.a < 5"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b = 19 and t1.a < 5"
}
}
]
}
}
}
}
}
}
]
}
},
{ "query_block": { "select_id": 2, "operation": "UNION", "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived4>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.max_c > 400 or v1.avg_c > 270"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "(v1.max_c > 400 or v1.avg_c > 270) and v1.a < t2.a", "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and (max_c > 400 or avg_c > 270)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
]
}
}
}
# using query with union
# extracted or formula : pushing into HAVING
# extracted or formula : pushing into WHERE
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where
((t2.a=v1.a) or (v1.b=t2.b)) and ((v1.a=1) or (v1.a=6))
union
select * from v1,t2 where ((v1.a>3) and (v1.b>27)) or (v1.max_c>550);
a b max_c avg_c a b c d 119107107.000012190912 119107107.0000119203107 121500234.600012190912 121500234.6000119203107 620315279.3333620315279 620315279.3333623303909 833404213.666723207207 833404213.666712190912 833404213.6667713312406 833404213.6667864248107 833404213.6667620315279 833404213.6667119203107 833404213.6667880800314 833404213.6667312231190 833404213.6667623303909
select * from v1,t2 where
((t2.a=v1.a) or (v1.b=t2.b)) and ((v1.a=1) or (v1.a=6))
union
select * from v1,t2 where ((v1.a>3) and (v1.b>27)) or (v1.max_c>550);
a b max_c avg_c a b c d 119107107.000012190912 119107107.0000119203107 121500234.600012190912 121500234.6000119203107 620315279.3333620315279 620315279.3333623303909 833404213.666723207207 833404213.666712190912 833404213.6667713312406 833404213.6667864248107 833404213.6667620315279 833404213.6667119203107 833404213.6667880800314 833404213.6667312231190 833404213.6667623303909
explain select * from v1,t2 where
((t2.a=v1.a) or (v1.b=t2.b)) and ((v1.a=1) or (v1.a=6))
union
select * from v1,t2 where ((v1.a>3) and (v1.b>27)) or (v1.max_c>550);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived3> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 UNION t2 ALL NULL NULL NULL NULL 9 2 UNION <derived4> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 4 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort
NULL UNION RESULT <union1,2> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where
((t2.a=v1.a) or (v1.b=t2.b)) and ((v1.a=1) or (v1.a=6))
union
select * from v1,t2 where ((v1.a>3) and (v1.b>27)) or (v1.max_c>550);
EXPLAIN
{ "query_block": { "union_result": { "table_name": "<union1,2>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a = 1 or v1.a = 6"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "(v1.a = t2.a or v1.b = t2.b) and (v1.a = 1 or v1.a = 6)", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 1 or t1.a = 6"
}
}
]
}
}
}
}
}
}
]
}
},
{ "query_block": { "select_id": 2, "operation": "UNION", "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived4>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a > 3 and v1.b > 27 or v1.max_c > 550"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v1.a > 3 and v1.b > 27 or v1.max_c > 550", "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and (t1.a > 3 and t1.b > 27 or max_c > 550)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
]
}
}
}
# using query with union
# extracted or formula : pushing into HAVING
# conjunctive subformulas : pushing into WHERE
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where
((v1.a=1) and (v1.a=t2.a)) and ((v1.max_c<500) or (v1.avg_c>500))
union
select * from v2,t2 where
((v2.a<t2.b) or (v2.max_c>200)) and (v2.b>10) and (t2.a<2)
union
select * from v2,t2 where
(v2.max_c=t2.c) and (v2.b<10);
a b max_c avg_c a b c d 119107107.000012190912 119107107.0000119203107 620315279.333312190912 620315279.3333119203107 833404213.666712190912 833404213.6667119203107
select * from v1,t2 where
((v1.a=1) and (v1.a=t2.a)) and ((v1.max_c<500) or (v1.avg_c>500))
union
select * from v2,t2 where
((v2.a<t2.b) or (v2.max_c>200)) and (v2.b>10) and (t2.a<2)
union
select * from v2,t2 where
(v2.max_c=t2.c) and (v2.b<10);
a b max_c avg_c a b c d 119107107.000012190912 119107107.0000119203107 620315279.333312190912 620315279.3333119203107 833404213.666712190912 833404213.6667119203107
explain select * from v1,t2 where
((v1.a=1) and (v1.a=t2.a)) and ((v1.max_c<500) or (v1.avg_c>500))
union
select * from v2,t2 where
((v2.a<t2.b) or (v2.max_c>200)) and (v2.b>10) and (t2.a<2)
union
select * from v2,t2 where
(v2.max_c=t2.c) and (v2.b<10);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived4> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 4 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 UNION t2 ALL NULL NULL NULL NULL 9 Using where 2 UNION <derived5> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 5 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 UNION t2 ALL NULL NULL NULL NULL 9 Using where 3 UNION <derived6> ref key0 key0 5 test.t2.c 2 Using where 6 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
NULL UNION RESULT <union1,2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where
((v1.a=1) and (v1.a=t2.a)) and ((v1.max_c<500) or (v1.avg_c>500))
union
select * from v2,t2 where
((v2.a<t2.b) or (v2.max_c>200)) and (v2.b>10) and (t2.a<2)
union
select * from v2,t2 where
(v2.max_c=t2.c) and (v2.b<10);
EXPLAIN
{ "query_block": { "union_result": { "table_name": "<union1,2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a = 1"
}
},
{ "block-nl-join": { "table": { "table_name": "<derived4>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a = 1 and (v1.max_c < 500 or v1.avg_c > 500)"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v1.max_c < 500 or v1.avg_c > 500", "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and (max_c < 500 or avg_c > 500)", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 1"
}
}
]
}
}
}
}
}
}
]
}
},
{ "query_block": { "select_id": 2, "operation": "UNION", "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a < 2"
}
},
{ "block-nl-join": { "table": { "table_name": "<derived5>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v2.b > 10"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v2.a < t2.b or v2.max_c > 200", "materialized": { "query_block": { "select_id": 5, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5 and t1.b > 10"
}
}
]
}
}
}
}
}
}
]
}
},
{ "query_block": { "select_id": 3, "operation": "UNION", "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.c is not null"
}
},
{ "table": { "table_name": "<derived6>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["max_c"], "ref": ["test.t2.c"], "loops": 9, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v2.b < 10", "materialized": { "query_block": { "select_id": 6, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5 and t1.b < 10"
}
}
]
}
}
}
}
}
}
]
}
}
]
}
}
}
# using derived table with union
# conjunctive subformulas : pushing into WHERE and HAVING set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v_union,t2 where (v_union.a<3) and (v_union.c>100);
a b c a b c d 11910723207207 11910712190912 119107713312406 119107864248107 119107620315279 119107119203107 119107880800314 119107312231190 119107623303909
select * from v_union,t2 where (v_union.a<3) and (v_union.c>100);
a b c a b c d 11910723207207 11910712190912 119107713312406 119107864248107 119107620315279 119107119203107 119107880800314 119107312231190 119107623303909
explain select * from v_union,t2 where (v_union.a<3) and (v_union.c>100);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 40 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 UNION t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v_union,t2 where (v_union.a<3) and (v_union.c>100);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 40, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v_union.a < 3 and v_union.c > 100"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "materialized": { "query_block": { "union_result": { "table_name": "<union2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c > 109 and c > 100", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 10 and t1.a < 3"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "UNION", "cost": "COST_REPLACED", "having_condition": "c < 300 and c > 100", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and t1.a < 3"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using derived table with union
# conjunctive subformula : pushing into WHERE
# extracted or formula : pushing into HAVING set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v_union,t2 where
((v_union.a<2) or (v_union.c>800)) and (v_union.b>12);
a b c a b c d 11910723207207 11910712190912 119107713312406 119107864248107 119107620315279 119107119203107 119107880800314 119107312231190 119107623303909
select * from v_union,t2 where
((v_union.a<2) or (v_union.c>800)) and (v_union.b>12);
a b c a b c d 11910723207207 11910712190912 119107713312406 119107864248107 119107620315279 119107119203107 119107880800314 119107312231190 119107623303909
explain select * from v_union,t2 where
((v_union.a<2) or (v_union.c>800)) and (v_union.b>12);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 40 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 UNION t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v_union,t2 where
((v_union.a<2) or (v_union.c>800)) and (v_union.b>12);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 40, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "(v_union.a < 2 or v_union.c > 800) and v_union.b > 12"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "attached_condition": "v_union.a < 2 or v_union.c > 800", "materialized": { "query_block": { "union_result": { "table_name": "<union2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c > 109 and (t1.a < 2 or c > 800)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 10 and t1.b > 12"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "UNION", "cost": "COST_REPLACED", "having_condition": "c < 300 and (t1.a < 2 or c > 800)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and t1.b > 12"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using derived table with union
# conjunctive subformula : pushing into HAVING
# conjunctive subformula : pushing into WHERE
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v_union,t2 where
(v_union.a=1) and (v_union.a=t2.a) and (v_union.c<200);
a b c a b c d 11910712190912 119107119203107
select * from v_union,t2 where
(v_union.a=1) and (v_union.a=t2.a) and (v_union.c<200);
a b c a b c d 11910712190912 119107119203107
explain select * from v_union,t2 where
(v_union.a=1) and (v_union.a=t2.a) and (v_union.c<200);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ALL distinct_key NULL NULL NULL 40 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 UNION t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v_union,t2 where
(v_union.a=1) and (v_union.a=t2.a) and (v_union.c<200);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a = 1"
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "possible_keys": ["distinct_key"], "loops": 9, "rows": 40, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v_union.a = 1 and v_union.c < 200"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "materialized": { "query_block": { "union_result": { "table_name": "<union2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c > 109 and c < 200", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 1"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "UNION", "cost": "COST_REPLACED", "having_condition": "c < 300 and c < 200", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 1 and t1.b > 10"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
} set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v_char as v,t2_char as t where
(v.a=t.a) and (v.b='Vika') and (v.max_c>2);
a b max_c a b c
c Vika 7 c Vinny 3
c Vika 7 c Inga 9
c Vika 7 c Ivan 2
c Vika 7 c Inga 2
select * from v_char as v,t2_char as t where
(v.a=t.a) and (v.b='Vika') and (v.max_c>2);
a b max_c a b c
c Vika 7 c Vinny 3
c Vika 7 c Inga 9
c Vika 7 c Ivan 2
c Vika 7 c Inga 2
explain select * from v_char as v,t2_char as t where
(v.a=t.a) and (v.b='Vika') and (v.max_c>2);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t ALL NULL NULL NULL NULL 12 Using where 1 PRIMARY <derived2> ref key0 key0 2 test.t.a 1 Using where 2 DERIVED t1_char ALL NULL NULL NULL NULL 12 Using where; Using temporary; Using filesort
explain format=json select * from v_char as v,t2_char as t where
(v.a=t.a) and (v.b='Vika') and (v.max_c>2);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t", "access_type": "ALL", "loops": 1, "rows": 12, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "2", "used_key_parts": ["a"], "ref": ["test.t.a"], "loops": 12, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v.b = 'Vika' and v.max_c > 2", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c < 9 and max_c > 2", "filesort": { "sort_key": "t1_char.a", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1_char", "access_type": "ALL", "loops": 1, "rows": 12, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1_char.b = 'Vika'"
}
}
]
}
}
}
}
}
}
]
}
}
# using derived table with union
# using several derived tables : pushing in all tables
# conjunctive subformula : pushing into WHERE using equalities
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v_union,v1,t2 where
(v_union.a=v1.a) and (v1.a=t2.a) and (t2.a=1) and ((v_union.c>800) or (v1.max_c>200));
a b c a b max_c avg_c a b c d 119107121500234.600012190912 119107121500234.6000119203107
select * from v_union,v1,t2 where
(v_union.a=v1.a) and (v1.a=t2.a) and (t2.a=1) and ((v_union.c>800) or (v1.max_c>200));
a b c a b max_c avg_c a b c d 119107121500234.600012190912 119107121500234.6000119203107
explain select * from v_union,v1,t2 where
(v_union.a=v1.a) and (v1.a=t2.a) and (t2.a=1) and ((v_union.c>800) or (v1.max_c>200));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived4> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 1 PRIMARY <derived2> ALL distinct_key NULL NULL NULL 40 Using where; Using join buffer (incremental, BNL join) 4 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 UNION t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v_union,v1,t2 where
(v_union.a=v1.a) and (v1.a=t2.a) and (t2.a=1) and ((v_union.c>800) or (v1.max_c>200));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a = 1"
}
},
{ "block-nl-join": { "table": { "table_name": "<derived4>", "access_type": "ALL", "loops": 9, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a = 1"
}, "buffer_type": "flat", "buffer_size": "238", "join_type": "BNL", "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 1"
}
}
]
}
}
}
}
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "possible_keys": ["distinct_key"], "loops": 180, "rows": 40, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v_union.a = 1"
}, "buffer_type": "incremental", "buffer_size": "4KiB", "join_type": "BNL", "attached_condition": "v_union.c > 800 or v1.max_c > 200", "materialized": { "query_block": { "union_result": { "table_name": "<union2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c > 109", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 1"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "UNION", "cost": "COST_REPLACED", "having_condition": "c < 300", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 1 and t1.b > 10"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using derived table with union
# extracted or formula : pushing into WHERE
# conjunctive subformula : pushing into HAVING
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v2_union as v,t2 where
((v.a=6) or (v.a=8)) and (v.c>200) and (v.a=t2.a);
a b c a b c d 833404.0000864248107 620312.0000620315279 620214.0000620315279 833404.0000880800314 620312.0000623303909 620214.0000623303909
select * from v2_union as v,t2 where
((v.a=6) or (v.a=8)) and (v.c>200) and (v.a=t2.a);
a b c a b c d 833404.0000864248107 620312.0000620315279 620214.0000620315279 833404.0000880800314 620312.0000623303909 620214.0000623303909
explain select * from v2_union as v,t2 where
((v.a=6) or (v.a=8)) and (v.c>200) and (v.a=t2.a);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.a 6 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 UNION t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 4 UNION t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
NULL UNION RESULT <union2,3,4> ALL NULL NULL NULL NULL NULL
explain format=json select * from v2_union as v,t2 where
((v.a=6) or (v.a=8)) and (v.c>200) and (v.a=t2.a);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "(t2.a = 6 or t2.a = 8) and t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 6, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v.c > 200", "materialized": { "query_block": { "union_result": { "table_name": "<union2,3,4>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c > 109 and c > 200", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 10 and (t1.a = 6 or t1.a = 8)"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "UNION", "cost": "COST_REPLACED", "having_condition": "c < 300 and c > 200", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and (t1.a = 6 or t1.a = 8)"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 4, "operation": "UNION", "cost": "COST_REPLACED", "having_condition": "c < 707 and c > 200", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.c > 300 and (t1.a = 6 or t1.a = 8)"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using derived table with union of selects without aggregation
# extracted conjunctive predicate: pushing in WHERE of both selects set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v3_union as v,t2 where (v.a=t2.a) and (v.c>6);
a b c a b c d 12112312190912 12110112190912 12110412190912 13398812190912 11910712190912 12150012190912 12134512190912 711708713312406 7118713312406 833404864248107 833123864248107 833114864248107 8339864248107 620214620315279 620315620315279 620309620315279 6207620315279 121123119203107 121101119203107 121104119203107 133988119203107 119107119203107 121500119203107 121345119203107 833404880800314 833123880800314 833114880800314 8339880800314 620214623303909 620315623303909 620309623303909 6207623303909
select * from v3_union as v,t2 where (v.a=t2.a) and (v.c>6);
a b c a b c d 12112312190912 12110112190912 12110412190912 13398812190912 11910712190912 12150012190912 12134512190912 711708713312406 7118713312406 833404864248107 833123864248107 833114864248107 8339864248107 620214620315279 620315620315279 620309620315279 6207620315279 121123119203107 121101119203107 121104119203107 133988119203107 119107119203107 121500119203107 121345119203107 833404880800314 833123880800314 833114880800314 8339880800314 620214623303909 620315623303909 620309623303909 6207623303909
explain select * from v3_union as v,t2 where (v.a=t2.a) and (v.c>6);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.a 4 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where 3 UNION t1 ALL NULL NULL NULL NULL 20 Using where
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v3_union as v,t2 where (v.a=t2.a) and (v.c>6);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 4, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v.c > 6", "materialized": { "query_block": { "union_result": { "table_name": "<union2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 10 and t1.a + 1 > 6"
}
}
]
}
},
{ "query_block": { "select_id": 3, "operation": "UNION", "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and t1.c > 100 and t1.c > 6"
}
}
]
}
}
]
}
}
}
}
}
]
}
}
# using derived table with union of selects without aggregation
# extracted conjunctive OR subformula: pushing in WHERE using equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v3_union as v,t2 where (v.a=t2.a) and ((t2.a>1) or (v.b<20));
a b c a b c d 11910712190912 119212190912 711708713312406 7118713312406 833404864248107 833123864248107 833114864248107 8339864248107 620214620315279 620315620315279 620309620315279 6207620315279 119107119203107 1192119203107 833404880800314 833123880800314 833114880800314 8339880800314 620214623303909 620315623303909 620309623303909 6207623303909
select * from v3_union as v,t2 where (v.a=t2.a) and ((t2.a>1) or (v.b<20));
a b c a b c d 11910712190912 119212190912 711708713312406 7118713312406 833404864248107 833123864248107 833114864248107 8339864248107 620214620315279 620315620315279 620309620315279 6207620315279 119107119203107 1192119203107 833404880800314 833123880800314 833114880800314 8339880800314 620214623303909 620315623303909 620309623303909 6207623303909
explain select * from v3_union as v,t2 where (v.a=t2.a) and ((t2.a>1) or (v.b<20));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.a 4 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where 3 UNION t1 ALL NULL NULL NULL NULL 20 Using where
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v3_union as v,t2 where (v.a=t2.a) and ((t2.a>1) or (v.b<20));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 4, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a > 1 or v.b < 20", "materialized": { "query_block": { "union_result": { "table_name": "<union2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 10 and (t1.a > 1 or t1.b < 20)"
}
}
]
}
},
{ "query_block": { "select_id": 3, "operation": "UNION", "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and t1.c > 100 and (t1.a > 1 or t1.b < 20)"
}
}
]
}
}
]
}
}
}
}
}
]
}
}
# using derived table with union of selects without aggregation
# extracted the whole condition: in WHERE of both selects set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v3_union as v,t2 where
(v.a=t2.a) and ((v.b=19) or (v.b=21)) and ((v.c<3) or (v.c>600));
a b c a b c d 119212190912 121212190912 1192119203107 1212119203107
select * from v3_union as v,t2 where
(v.a=t2.a) and ((v.b=19) or (v.b=21)) and ((v.c<3) or (v.c>600));
a b c a b c d 119212190912 121212190912 1192119203107 1212119203107
explain select * from v3_union as v,t2 where
(v.a=t2.a) and ((v.b=19) or (v.b=21)) and ((v.c<3) or (v.c>600));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.a 4 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where 3 UNION t1 ALL NULL NULL NULL NULL 20 Using where
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v3_union as v,t2 where
(v.a=t2.a) and ((v.b=19) or (v.b=21)) and ((v.c<3) or (v.c>600));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 4, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "(v.b = 19 or v.b = 21) and (v.c < 3 or v.c > 600)", "materialized": { "query_block": { "union_result": { "table_name": "<union2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 10 and (t1.b = 19 or t1.b = 21) and (t1.a + 1 < 3 or t1.a + 1 > 600)"
}
}
]
}
},
{ "query_block": { "select_id": 3, "operation": "UNION", "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and t1.c > 100 and (t1.b = 19 or t1.b = 21) and (t1.c < 3 or t1.c > 600)"
}
}
]
}
}
]
}
}
}
}
}
]
}
}
# using derived table with union of
# a select without aggregation and a select with aggregation
# extracted conjunctive predicate: pushing in WHERE of both selects set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v4_union as v,t2 where (v.a=t2.a) and (v.b<20);
a b c a b c d 11920712190912 711808713312406 711608713312406 119207119203107
select * from v4_union as v,t2 where (v.a=t2.a) and (v.b<20);
a b c a b c d 11920712190912 711808713312406 711608713312406 119207119203107
explain select * from v4_union as v,t2 where (v.a=t2.a) and (v.b<20);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.a 4 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 UNION t1 ALL NULL NULL NULL NULL 20 Using where
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v4_union as v,t2 where (v.a=t2.a) and (v.b<20);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 4, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v.b < 20", "materialized": { "query_block": { "union_result": { "table_name": "<union2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c > 109", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 10 and t1.b < 20"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "UNION", "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and t1.b < 20"
}
}
]
}
}
]
}
}
}
}
}
]
}
}
# using derived table with union of
# a select without aggregation and a select with aggregation
# extracted subformula: pushing in WHERE of one select
# extracted subformula: pushing in HAVING of the other select
# extracted sub-subformula: pushing in WHERE of the other select
# using an equality in all pushdowns set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v4_union as v,t2 where
(v.a=t2.a) and ((t2.a<3) or (v.b<40)) and (v.c>500);
a b c a b c d 133108812190912 12160012190912 13388812190912 711808713312406 711608713312406 833504864248107 1331088119203107 121600119203107 133888119203107 833504880800314
select * from v4_union as v,t2 where
(v.a=t2.a) and ((t2.a<3) or (v.b<40)) and (v.c>500);
a b c a b c d 133108812190912 12160012190912 13388812190912 711808713312406 711608713312406 833504864248107 1331088119203107 121600119203107 133888119203107 833504880800314
explain select * from v4_union as v,t2 where
(v.a=t2.a) and ((t2.a<3) or (v.b<40)) and (v.c>500);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.a 4 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 UNION t1 ALL NULL NULL NULL NULL 20 Using where
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v4_union as v,t2 where
(v.a=t2.a) and ((t2.a<3) or (v.b<40)) and (v.c>500);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 4, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "(t2.a < 3 or v.b < 40) and v.c > 500", "materialized": { "query_block": { "union_result": { "table_name": "<union2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c > 109 and c > 500", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 10 and (t1.a < 3 or t1.b < 40)"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "UNION", "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and (t1.a < 3 or t1.b < 40) and t1.c + 100 > 500"
}
}
]
}
}
]
}
}
}
}
}
]
}
}
# using embedded derived table : pushing the same conditions
# using several derived tables : pushing in all tables
# conjunctive subformula : pushing into WHERE
# extracted and formula : pushing into WHERE set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v4,v1 where
(v4.a<13) and (v1.a>5) and (v1.b>12);
a b min_c a b max_c avg_c 119107620315279.3333 121500620315279.3333 516207620315279.3333 527132620315279.3333 620315620315279.3333 833404620315279.3333 119107833404213.6667 121500833404213.6667 516207833404213.6667 527132833404213.6667 620315833404213.6667 833404833404213.6667
select * from v4,v1 where
(v4.a<13) and (v1.a>5) and (v1.b>12);
a b min_c a b max_c avg_c 119107620315279.3333 121500620315279.3333 516207620315279.3333 527132620315279.3333 620315620315279.3333 833404620315279.3333 119107833404213.6667 121500833404213.6667 516207833404213.6667 527132833404213.6667 620315833404213.6667 833404833404213.6667
explain select * from v4,v1 where
(v4.a<13) and (v1.a>5) and (v1.b>12);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where 1 PRIMARY <derived4> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join) 4 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED <derived3> ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v4,v1 where
(v4.a<13) and (v1.a>5) and (v1.b>12);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v4.a < 13", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "filesort": { "sort_key": "v1.a, v1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a < 15 and v1.a < 13", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 15 and t1.a < 13"
}
}
]
}
}
}
}
}
}
]
}
}
}
}
}
},
{ "block-nl-join": { "table": { "table_name": "<derived4>", "access_type": "ALL", "loops": 20, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a > 5 and v1.b > 12"
}, "buffer_type": "flat", "buffer_size": "333", "join_type": "BNL", "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5 and t1.b > 12"
}
}
]
}
}
}
}
}
}
]
}
}
# using embedded view : nothing to push
# using several derived tables : pushing only in one table
# conjunctive subformula : pushing into WHERE set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v4,v1,t2 where
(v4.a=t2.a) and (v4.a=v1.a) and (v1.b>30);
a b min_c a b max_c avg_c a b c d 833404833404213.6667864248107 833404833404213.6667880800314
select * from v4,v1,t2 where
(v4.a=t2.a) and (v4.a=v1.a) and (v1.b>30);
a b min_c a b max_c avg_c a b c d 833404833404213.6667864248107 833404833404213.6667880800314
explain select * from v4,v1,t2 where
(v4.a=t2.a) and (v4.a=v1.a) and (v1.b>30);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1 key1 5 test.t2.a 2 1 PRIMARY <derived4> ref key0 key0 5 test.t2.a 2 Using where 4 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED <derived3> ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v4,v1,t2 where
(v4.a=t2.a) and (v4.a=v1.a) and (v1.b>30);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null and t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "filesort": { "sort_key": "v1.a, v1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a < 15", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 15"
}
}
]
}
}
}
}
}
}
]
}
}
}
}
}
},
{ "table": { "table_name": "<derived4>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 18, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.b > 30", "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 30"
}
}
]
}
}
}
}
}
}
]
}
}
# using embedded view : pushing different conditions
# using several derived tables : pushing in all tables
# conjunctive subformula : pushing into WHERE using equalities
# extracted and formula : pushing into WHERE using equalities
# conjunctive subformula : pushing into HAVING set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v4,v1,t2 where
(v4.a=t2.a) and (v4.a>1) and (v4.a=v1.a) and (v4.min_c>100) and (v1.b<30);
a b min_c a b max_c avg_c a b c d 620315620315279.3333620315279 620315620315279.3333623303909
select * from v4,v1,t2 where
(v4.a=t2.a) and (v4.a>1) and (v4.a=v1.a) and (v4.min_c>100) and (v1.b<30);
a b min_c a b max_c avg_c a b c d 620315620315279.3333620315279 620315620315279.3333623303909
explain select * from v4,v1,t2 where
(v4.a=t2.a) and (v4.a>1) and (v4.a=v1.a) and (v4.min_c>100) and (v1.b<30);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1 key1 5 test.t2.a 2 Using where 1 PRIMARY <derived4> ref key0 key0 5 test.t2.a 2 Using where 4 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED <derived3> ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v4,v1,t2 where
(v4.a=t2.a) and (v4.a>1) and (v4.a=v1.a) and (v4.min_c>100) and (v1.b<30);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a > 1 and t2.a is not null and t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v4.min_c > 100", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "min_c > 100", "filesort": { "sort_key": "v1.a, v1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a < 15 and v1.a > 1", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 15 and t1.a > 1"
}
}
]
}
}
}
}
}
}
]
}
}
}
}
}
},
{ "table": { "table_name": "<derived4>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 18, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.b < 30", "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 1 and t1.b < 30"
}
}
]
}
}
}
}
}
}
]
}
}
# using embedded view : pushing different conditions
# using several derived tables : pushing in all tables
# extracted or formula : pushing into WHERE
# conjunctive subformula : pushing into HAVING set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v4,v1,t2 where
(((v4.b>10) and (v4.a>1)) or (v4.b<20)) and (v1.max_c>200) and (v1.a=v4.a);
a b min_c a b max_c avg_c a b c d 119107121500234.600023207207 516207516207207.000023207207 527132516207207.000023207207 620315620315279.333323207207 833404833404213.666723207207 119107121500234.600012190912 516207516207207.000012190912 527132516207207.000012190912 620315620315279.333312190912 833404833404213.666712190912 119107121500234.6000713312406 516207516207207.0000713312406 527132516207207.0000713312406 620315620315279.3333713312406 833404833404213.6667713312406 119107121500234.6000864248107 516207516207207.0000864248107 527132516207207.0000864248107 620315620315279.3333864248107 833404833404213.6667864248107 119107121500234.6000620315279 516207516207207.0000620315279 527132516207207.0000620315279 620315620315279.3333620315279 833404833404213.6667620315279 119107121500234.6000119203107 516207516207207.0000119203107 527132516207207.0000119203107 620315620315279.3333119203107 833404833404213.6667119203107 119107121500234.6000880800314 516207516207207.0000880800314 527132516207207.0000880800314 620315620315279.3333880800314 833404833404213.6667880800314 119107121500234.6000312231190 516207516207207.0000312231190 527132516207207.0000312231190 620315620315279.3333312231190 833404833404213.6667312231190 119107121500234.6000623303909 516207516207207.0000623303909 527132516207207.0000623303909 620315620315279.3333623303909 833404833404213.6667623303909
select * from v4,v1,t2 where
(((v4.b>10) and (v4.a>1)) or (v4.b<20)) and (v1.max_c>200) and (v1.a=v4.a);
a b min_c a b max_c avg_c a b c d 119107121500234.600023207207 516207516207207.000023207207 527132516207207.000023207207 620315620315279.333323207207 833404833404213.666723207207 119107121500234.600012190912 516207516207207.000012190912 527132516207207.000012190912 620315620315279.333312190912 833404833404213.666712190912 119107121500234.6000713312406 516207516207207.0000713312406 527132516207207.0000713312406 620315620315279.3333713312406 833404833404213.6667713312406 119107121500234.6000864248107 516207516207207.0000864248107 527132516207207.0000864248107 620315620315279.3333864248107 833404833404213.6667864248107 119107121500234.6000620315279 516207516207207.0000620315279 527132516207207.0000620315279 620315620315279.3333620315279 833404833404213.6667620315279 119107121500234.6000119203107 516207516207207.0000119203107 527132516207207.0000119203107 620315620315279.3333119203107 833404833404213.6667119203107 119107121500234.6000880800314 516207516207207.0000880800314 527132516207207.0000880800314 620315620315279.3333880800314 833404833404213.6667880800314 119107121500234.6000312231190 516207516207207.0000312231190 527132516207207.0000312231190 620315620315279.3333312231190 833404833404213.6667312231190 119107121500234.6000623303909 516207516207207.0000623303909 527132516207207.0000623303909 620315620315279.3333623303909 833404833404213.6667623303909
explain select * from v4,v1,t2 where
(((v4.b>10) and (v4.a>1)) or (v4.b<20)) and (v1.max_c>200) and (v1.a=v4.a);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where 1 PRIMARY <derived4> ref key0 key0 5 v4.a 2 Using where 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using join buffer (flat, BNL join) 4 DERIVED t1 ALL NULL NULL NULL NULL 20 Using temporary; Using filesort 2 DERIVED <derived3> ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v4,v1,t2 where
(((v4.b>10) and (v4.a>1)) or (v4.b<20)) and (v1.max_c>200) and (v1.a=v4.a);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "(v4.b > 10 and v4.a > 1 or v4.b < 20) and v4.a is not null", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "filesort": { "sort_key": "v1.a, v1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a < 15 and (v1.b > 10 and v1.a > 1 or v1.b < 20)", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 15 and (t1.b > 10 and t1.a > 1 or t1.b < 20)"
}
}
]
}
}
}
}
}
}
]
}
}
}
}
}
},
{ "table": { "table_name": "<derived4>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["a"], "ref": ["v4.a"], "loops": 20, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.max_c > 200", "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and max_c > 200", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
},
{ "block-nl-join": { "table": { "table_name": "t2", "access_type": "ALL", "loops": 40, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}, "buffer_type": "flat", "buffer_size": "1KiB", "join_type": "BNL"
}
}
]
}
}
# using embedded view : pushing different conditions
# using several derived tables : pushing only in one table
# extracted or formula : pushing into WHERE
# extracted or formula : pushing into HAVING set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v4,v2 where
((v4.a>12) and (v4.min_c<300) and (v4.b>13)) or (v4.a<1);
a b min_c a b max_c avg_c
select * from v4,v2 where
((v4.a>12) and (v4.min_c<300) and (v4.b>13)) or (v4.a<1);
a b min_c a b max_c avg_c
explain select * from v4,v2 where
((v4.a>12) and (v4.min_c<300) and (v4.b>13)) or (v4.a<1);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where 1 PRIMARY <derived4> ALL NULL NULL NULL NULL 20 Using join buffer (flat, BNL join) 4 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED <derived3> ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v4,v2 where
((v4.a>12) and (v4.min_c<300) and (v4.b>13)) or (v4.a<1);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v4.a > 12 and v4.min_c < 300 and v4.b > 13 or v4.a < 1", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "v1.a > 12 and min_c < 300 and v1.b > 13 or v1.a < 1", "filesort": { "sort_key": "v1.a, v1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a < 15 and (v1.a > 12 and v1.b > 13 or v1.a < 1)", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 15 and (t1.a > 12 and t1.b > 13 or t1.a < 1)"
}
}
]
}
}
}
}
}
}
]
}
}
}
}
}
},
{ "block-nl-join": { "table": { "table_name": "<derived4>", "access_type": "ALL", "loops": 20, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}, "buffer_type": "flat", "buffer_size": "333", "join_type": "BNL", "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5"
}
}
]
}
}
}
}
}
}
]
}
}
# using embedded view : pushing different conditions
# using several derived tables : pushing only in one table
# conjunctive subformula : pushing into WHERE
# conjunctive subformula : pushing into HAVING
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v4,v2 where
(v4.a=v2.b) and (v4.a=v4.b) and (v4.min_c<100);
a b min_c a b max_c avg_c
select * from v4,v2 where
(v4.a=v2.b) and (v4.a=v4.b) and (v4.min_c<100);
a b min_c a b max_c avg_c
explain select * from v4,v2 where
(v4.a=v2.b) and (v4.a=v4.b) and (v4.min_c<100);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived4> ALL NULL NULL NULL NULL 20 Using where 1 PRIMARY <derived2> ref key0 key0 10 v2.b,v2.b 1 Using where 4 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED <derived3> ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v4,v2 where
(v4.a=v2.b) and (v4.a=v4.b) and (v4.min_c<100);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived4>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v2.b is not null and v2.b is not null", "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5"
}
}
]
}
}
}
}
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "10", "used_key_parts": ["a", "b"], "ref": ["v2.b", "v2.b"], "loops": 20, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v4.min_c < 100", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "min_c < 100", "filesort": { "sort_key": "v1.a, v1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.b = v1.a and v1.a < 15", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b = t1.a and t1.a < 15"
}
}
]
}
}
}
}
}
}
]
}
}
}
}
}
}
]
}
}
# using embedded view : pushing the same conditions
# using several derived tables : pushing in all tables
# extracted and formula : pushing into WHERE using equalities
# conjunctive subformula : pushing into WHERE
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v4,v2 where
(v4.a=v2.b) and (v4.a=v4.b) and (v2.b<30);
a b min_c a b max_c avg_c
select * from v4,v2 where
(v4.a=v2.b) and (v4.a=v4.b) and (v2.b<30);
a b min_c a b max_c avg_c
explain select * from v4,v2 where
(v4.a=v2.b) and (v4.a=v4.b) and (v2.b<30);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived4> ALL NULL NULL NULL NULL 20 Using where 1 PRIMARY <derived2> ref key0 key0 10 v2.b,v2.b 1 4 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED <derived3> ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v4,v2 where
(v4.a=v2.b) and (v4.a=v4.b) and (v2.b<30);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived4>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v2.b < 30 and v2.b is not null and v2.b is not null", "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5 and t1.b < 30"
}
}
]
}
}
}
}
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "10", "used_key_parts": ["a", "b"], "ref": ["v2.b", "v2.b"], "loops": 20, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "filesort": { "sort_key": "v1.a, v1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.b = v1.a and v1.a < 15 and v1.a < 30", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b = t1.a and t1.a < 15 and t1.a < 30"
}
}
]
}
}
}
}
}
}
]
}
}
}
}
}
}
]
}
}
# using embedded view : pushing the same conditions
# using several derived tables : pushing in all tables
# extracted or formula : pushing into WHERE using equalities
# extracted and formula : pushing into WHERE using equalities
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v4,v2 where
(v4.a=v2.b) and (v4.a=v4.b) and ((v2.b<30) or (v4.a>2));
a b min_c a b max_c avg_c
select * from v4,v2 where
(v4.a=v2.b) and (v4.a=v4.b) and ((v2.b<30) or (v4.a>2));
a b min_c a b max_c avg_c
explain select * from v4,v2 where
(v4.a=v2.b) and (v4.a=v4.b) and ((v2.b<30) or (v4.a>2));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived4> ALL NULL NULL NULL NULL 20 Using where 1 PRIMARY <derived2> ref key0 key0 10 v2.b,v2.b 1 4 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED <derived3> ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v4,v2 where
(v4.a=v2.b) and (v4.a=v4.b) and ((v2.b<30) or (v4.a>2));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived4>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "(v2.b < 30 or v2.b > 2) and v2.b is not null and v2.b is not null", "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5 and (t1.b < 30 or t1.b > 2)"
}
}
]
}
}
}
}
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "10", "used_key_parts": ["a", "b"], "ref": ["v2.b", "v2.b"], "loops": 20, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "filesort": { "sort_key": "v1.a, v1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.b = v1.a and v1.a < 15 and (v1.a < 30 or v1.a > 2)", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b = t1.a and t1.a < 15 and (t1.a < 30 or t1.a > 2)"
}
}
]
}
}
}
}
}
}
]
}
}
}
}
}
}
]
}
}
# using embedded view : pushing the same conditions
# using several derived tables : pushing in all tables
# extracted or formula : pushing into WHERE
# conjunctive subformula : pushing into WHERE
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v4,v2 where
(((v4.a<12) and (v4.b>13)) or (v4.a>10)) and
(v4.min_c=v2.max_c) and (v4.min_c>100);
a b min_c a b max_c avg_c 620315620315279.3333 833404833404213.6667
select * from v4,v2 where
(((v4.a<12) and (v4.b>13)) or (v4.a>10)) and
(v4.min_c=v2.max_c) and (v4.min_c>100);
a b min_c a b max_c avg_c 620315620315279.3333 833404833404213.6667
explain select * from v4,v2 where
(((v4.a<12) and (v4.b>13)) or (v4.a>10)) and
(v4.min_c=v2.max_c) and (v4.min_c>100);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where 1 PRIMARY <derived4> ref key0 key0 5 v4.min_c 2 4 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED <derived3> ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v4,v2 where
(((v4.a<12) and (v4.b>13)) or (v4.a>10)) and
(v4.min_c=v2.max_c) and (v4.min_c>100);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "(v4.a < 12 and v4.b > 13 or v4.a > 10) and v4.min_c > 100 and v4.min_c is not null", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "min_c > 100", "filesort": { "sort_key": "v1.a, v1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a < 15 and (v1.a < 12 and v1.b > 13 or v1.a > 10)", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 15 and (t1.a < 12 and t1.b > 13 or t1.a > 10)"
}
}
]
}
}
}
}
}
}
]
}
}
}
}
}
},
{ "table": { "table_name": "<derived4>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["max_c"], "ref": ["v4.min_c"], "loops": 20, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "having_condition": "max_c < 707 and max_c > 100", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5"
}
}
]
}
}
}
}
}
}
]
}
}
# using embedded view : pushing the same conditions
# using several derived tables : pushing only in one table
# extracted or formula : pushing into WHERE set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v4,v2,t2 where
(((v4.a<12) and (t2.b>13)) or (v4.a>10)) and
(v4.min_c=t2.c) and (t2.c>100);
a b min_c a b max_c avg_c a b c d 620315620315279.3333620315279 620315833404213.6667620315279
select * from v4,v2,t2 where
(((v4.a<12) and (t2.b>13)) or (v4.a>10)) and
(v4.min_c=t2.c) and (t2.c>100);
a b min_c a b max_c avg_c a b c d 620315620315279.3333620315279 620315833404213.6667620315279
explain select * from v4,v2,t2 where
(((v4.a<12) and (t2.b>13)) or (v4.a>10)) and
(v4.min_c=t2.c) and (t2.c>100);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key0 key0 5 test.t2.c 2 Using where 1 PRIMARY <derived4> ALL NULL NULL NULL NULL 20 Using join buffer (flat, BNL join) 4 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 2 DERIVED <derived3> ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort 3 DERIVED t1 ALL NULL NULL NULL NULL 20 Using where; Using temporary; Using filesort
explain format=json select * from v4,v2,t2 where
(((v4.a<12) and (t2.b>13)) or (v4.a>10)) and
(v4.min_c=t2.c) and (t2.c>100);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.c > 100 and t2.c is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["min_c"], "ref": ["test.t2.c"], "loops": 9, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v4.a < 12 and t2.b > 13 or v4.a > 10", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "min_c > 100", "filesort": { "sort_key": "v1.a, v1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a < 15 and (v1.a < 12 or v1.a > 10)", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 15 and (t1.a < 12 or t1.a > 10)"
}
}
]
}
}
}
}
}
}
]
}
}
}
}
}
},
{ "block-nl-join": { "table": { "table_name": "<derived4>", "access_type": "ALL", "loops": 18, "rows": 20, "cost": "COST_REPLACED", "filtered": 100
}, "buffer_type": "flat", "buffer_size": "715", "join_type": "BNL", "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "having_condition": "max_c < 707", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 20, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 5"
}
}
]
}
}
}
}
}
}
]
}
}
drop view v1,v2,v3,v4;
drop view v_union,v2_union,v3_union,v4_union;
drop view v_double,v_char,v_decimal;
drop table t1,t2,t1_double,t2_double,t1_char,t2_char,t1_decimal,t2_decimal;
#
# MDEV-10782: condition extracted from a multiple equality
# pushed into HAVING
#
CREATE TABLE t1 (i int);
INSERT INTO t1 VALUES (1),(2);
EXPLAIN EXTENDED
SELECT *
FROM ( SELECT * FROM ( SELECT MIN(i) as f FROM t1 ) sq1 ) AS sq2
WHERE f = 8;
id select_type table type possible_keys key key_len ref rows filtered Extra 1 PRIMARY <derived3> ALL NULL NULL NULL NULL 2100.00 Using where 3 DERIVED t1 ALL NULL NULL NULL NULL 2100.00
Warnings:
Note 1003/* select#1 */ select `sq1`.`f` AS `f` from (/* select#3 */ select min(`test`.`t1`.`i`) AS `f` from `test`.`t1` having `f` = 8) `sq1` where `sq1`.`f` = 8
SELECT *
FROM ( SELECT * FROM ( SELECT MIN(i) as f FROM t1 ) sq1 ) AS sq2
WHERE f = 8;
f
SELECT *
FROM ( SELECT * FROM ( SELECT MIN(i) as f FROM t1 ) sq1 ) AS sq2
WHERE f = 1;
f 1
DROP TABLE t1;
#
# MDEV-10783: pushdown into constant view
#
CREATE TABLE t1 (i int) ENGINE=MyISAM;
CREATE VIEW v AS SELECT 5;
SELECT * FROM t1 WHERE 1 IN ( SELECT * FROM v );
i
DROP VIEW v;
DROP TABLE t1;
#
# MDEV-10785: second execution of a query with condition
# pushed into view
#
CREATE TABLE t1 (i int);
CREATE VIEW v1 AS SELECT i FROM t1 WHERE i < 5;
CREATE FUNCTION f (in1 int) RETURNS int RETURN in1;
CREATE VIEW v2 AS SELECT * FROM v1 GROUP BY i;
PREPARE stmt FROM "SELECT * FROM v2 WHERE f(0) <> 2";
EXECUTE stmt;
i
EXECUTE stmt;
i
DROP FUNCTION f;
DROP VIEW v2,v1;
DROP TABLE t1;
#
# MDEV-10884: condition pushdown into derived specified by
# 1. unit with SELECT containing ORDER BY ... LIMIT
# 2. unit containing global ORDER BY ... LIMIT
#
create table t1(a int);
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
select a from t1 order by a limit 5;
a 0 1 2 3 4 set statement optimizer_switch='condition_pushdown_for_derived=off' for
select * from (select a from t1 order by a limit 5) t where t.a not in (1,2,3);
a 0 4 set statement optimizer_switch='condition_pushdown_for_derived=on' for
select * from (select a from t1 order by a limit 5) t where t.a not in (1,2,3);
a 0 4
select a from t1 where a < 4 union select a from t1 where a > 5
order by a limit 5;
a 0 1 2 3 6 set statement optimizer_switch='condition_pushdown_for_derived=off' for
select * from
(select a from t1 where a < 4 union select a from t1 where a > 5
order by a limit 5) t where t.a not in (2,9);
a 0 1 3 6 set statement optimizer_switch='condition_pushdown_for_derived=on' for
select * from
(select a from t1 where a < 4 union select a from t1 where a > 5
order by a limit 5) t where t.a not in (2,9);
a 0 1 3 6
drop table t1;
#
# MDEV-11072: pushdown of the condition obtained
# after constant row substitution
#
CREATE TABLE t1 (a INT) ENGINE=MyISAM;
CREATE TABLE t2 (b INT) ENGINE=MyISAM;
CREATE ORREPLACE VIEW v2 AS SELECT * FROM t2;
CREATE TABLE t3 (c INT) ENGINE=MyISAM;
CREATE ORREPLACE ALGORITHM=TEMPTABLE VIEW v3 AS SELECT * FROM t3;
SELECT * FROM t1 WHERE a IN (
SELECT b FROM v2 WHERE b < a OR b IN (
SELECT c FROM v3 WHERE c = a
)
);
a
INSERT INTO t1 VALUES (2);
INSERT INTO t2 VALUES (3), (2);
INSERT INTO t3 VALUES (4), (1), (2), (7);
SELECT * FROM t1 WHERE a IN (
SELECT b FROM v2 WHERE b < a OR b IN (
SELECT c FROM v3 WHERE c = a
)
);
a 2
EXPLAIN FORMAT=JSON
SELECT * FROM t1 WHERE a IN (
SELECT b FROM v2 WHERE b < a OR b IN (
SELECT c FROM v3 WHERE c = a
)
);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "const_condition": "0 or <in_optimizer>(2,<exists>(subquery#3))", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "system", "rows": 1, "filtered": 100
}
},
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 50, "attached_condition": "t2.b = 2", "first_match": "t1"
}
}
], "subqueries": [
{ "query_block": { "select_id": 3, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived5>", "access_type": "index_subquery", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["c"], "ref": ["func"], "loops": 1, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 5, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t3", "access_type": "ALL", "loops": 1, "rows": 4, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t3.c = 2"
}
}
]
}
}
}
}
]
}
}
]
}
}
CREATE TABLE t4 (d INT, e INT) ENGINE=MyISAM;
INSERT INTO t4 VALUES (1,10),(3,11),(2,10),(2,20),(3,21);
CREATE ORREPLACE VIEW v4 AS
SELECT d, sum(e) AS s FROM t4 GROUP BY d; set statement optimizer_switch='condition_pushdown_for_derived=off' for SELECT * FROM t1 WHERE a IN (
SELECT b FROM v2 WHERE b < a OR b IN (
SELECT d FROM v4 WHERE s > a
)
);
a 2
SELECT * FROM t1 WHERE a IN (
SELECT b FROM v2 WHERE b < a OR b IN (
SELECT d FROM v4 WHERE s > a
)
);
a 2
explain SELECT * FROM t1 WHERE a IN (
SELECT b FROM v2 WHERE b < a OR b IN (
SELECT d FROM v4 WHERE s > a
)
);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t1 system NULL NULL NULL NULL 1 1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where; FirstMatch(t1) 3 DEPENDENT SUBQUERY <derived5> index_subquery key0 key0 5 func 1 Using where 5 DERIVED t4 ALL NULL NULL NULL NULL 5 Using temporary; Using filesort
explain format=json SELECT * FROM t1 WHERE a IN (
SELECT b FROM v2 WHERE b < a OR b IN (
SELECT d FROM v4 WHERE s > a
)
);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "const_condition": "0 or <in_optimizer>(2,<exists>(subquery#3))", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "system", "rows": 1, "filtered": 100
}
},
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 50, "attached_condition": "t2.b = 2", "first_match": "t1"
}
}
], "subqueries": [
{ "query_block": { "select_id": 3, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived5>", "access_type": "index_subquery", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["d"], "ref": ["func"], "loops": 1, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 5, "cost": "COST_REPLACED", "having_condition": "s > 2", "filesort": { "sort_key": "t4.d", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t4", "access_type": "ALL", "loops": 1, "rows": 5, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
]
}
}
DROP VIEW v2,v3,v4;
DROP TABLE t1,t2,t3,t4;
#
# MDEV-10800: pushdown of the condition obtained
# after constant row substitution
#
CREATE TABLE t1 (a INT) ENGINE=MyISAM;
INSERT INTO t1 VALUES (1);
CREATE TABLE t2 (b INT) ENGINE=MyISAM;
INSERT INTO t2 VALUES (3),(4);
CREATE ORREPLACE ALGORITHM=TEMPTABLE VIEW v2 AS SELECT * FROM t2;
SELECT * FROM
( SELECT * FROM t1
WHERE EXISTS ( SELECT * FROM v2 WHERE b = a ) ) AS sq;
a
EXPLAIN FORMAT=JSON
SELECT * FROM
( SELECT * FROM t1
WHERE EXISTS ( SELECT * FROM v2 WHERE b = a ) ) AS sq;
EXPLAIN
{ "query_block": { "select_id": 1, "const_condition": "<in_optimizer>(1,exists(subquery#3))", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "system", "rows": 1, "filtered": 100
}
}
], "subqueries": [
{ "query_block": { "select_id": 3, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived4>", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v2.b = 1", "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.b = 1"
}
}
]
}
}
}
}
]
}
}
]
}
}
DROP VIEW v2;
DROP TABLE t1,t2;
#
# MDEV-11102: condition pushdown into materialized inner table
# of outer join is not applied as not being valid
#
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (0),(2);
CREATE TABLE t2 (b INT);
INSERT INTO t2 VALUES (1),(2);
CREATE ORREPLACE ALGORITHM=TEMPTABLE VIEW v2 AS SELECT * FROM t2;
SELECT * FROM t1 LEFT JOIN t2 ON a = b WHERE b IS NULL;
a b 0 NULL
SELECT * FROM t1 LEFT JOIN v2 ON a = b WHERE b IS NULL;
a b 0 NULL
EXPLAIN FORMAT=JSON
SELECT * FROM t1 LEFT JOIN v2 ON a = b WHERE b IS NULL;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["b"], "ref": ["test.t1.a"], "loops": 2, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "trigcond(v2.b is null) and trigcond(trigcond(t1.a is not null))", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
]
}
}
DROP VIEW v2;
DROP TABLE t1,t2;
#
# MDEV-11103: pushdown condition with ANY subquery
#
CREATE TABLE t1 (i INT);
CREATE ORREPLACE ALGORITHM=TEMPTABLE VIEW v1 AS SELECT * FROM t1;
INSERT INTO t1 VALUES (1),(2);
EXPLAIN FORMAT=JSON
SELECT * FROM v1 WHERE i <= ANY ( SELECT 3 );
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "<nop>(v1.i <= 3)", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "<nop>(t1.i <= 3)"
}
}
]
}
}
}
}
]
}
}
Warnings:
Note 1249 Select 2 was reduced during optimization
SELECT * FROM v1 WHERE i <= ANY ( SELECT 3 );
i 1 2
DROP VIEW v1;
DROP TABLE t1;
#
# MDEV-11315: condition with outer reference to mergeable derived
#
CREATE TABLE t1 (pk1 INT PRIMARY KEY, a INT, b INT) ENGINE=MyISAM;
INSERT INTO t1 VALUES (10,7,1),(11,0,2);
CREATE TABLE t2 (pk2 INT PRIMARY KEY, c INT, d DATETIME) ENGINE=MyISAM;
INSERT INTO t2 VALUES
(1,4,'2008-09-27 00:34:58'),
(2,5,'2007-05-28 00:00:00'),
(3,6,'2009-07-25 09:21:20');
CREATE VIEW v1 AS SELECT * FROM t1;
CREATE ALGORITHM=TEMPTABLE VIEW v2 AS SELECT * FROM t2;
SELECT * FROM v1 AS sq
WHERE b IN ( SELECT pk2 FROM v2 WHERE c > sq.b ) OR b = 100;
pk1 a b 1071 1102
EXPLAIN FORMAT=JSON
SELECT * FROM v1 AS sq
WHERE b IN ( SELECT pk2 FROM v2 WHERE c > sq.b ) OR b = 100;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "<in_optimizer>(t1.b,<exists>(subquery#2)) or t1.b = 100"
}
}
], "subqueries": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived4>", "access_type": "index_subquery", "possible_keys": ["key0"], "key": "key0", "key_length": "4", "used_key_parts": ["pk2"], "ref": ["func"], "loops": 1, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
]
}
}
]
}
}
SELECT * FROM ( SELECT * FROM t1 ) AS sq
WHERE b IN ( SELECT pk2 FROM v2 WHERE c > sq.b ) OR b = 100;
pk1 a b 1071 1102
EXPLAIN FORMAT=JSON
SELECT * FROM ( SELECT * FROM t1 ) AS sq
WHERE b IN ( SELECT pk2 FROM v2 WHERE c > sq.b ) OR b = 100;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "<in_optimizer>(t1.b,<exists>(subquery#3)) or t1.b = 100"
}
}
], "subqueries": [
{ "query_block": { "select_id": 3, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived4>", "access_type": "index_subquery", "possible_keys": ["key0"], "key": "key0", "key_length": "4", "used_key_parts": ["pk2"], "ref": ["func"], "loops": 1, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
]
}
}
]
}
}
DROP VIEW v1,v2;
DROP TABLE t1,t2;
#
# MDEV-11313: pushdown of the condition obtained
# after constant row substitution
#
CREATE TABLE t1 (a INT) ENGINE=MyISAM;
INSERT INTO t1 VALUES (1),(2);
CREATE TABLE t2 (b INT) ENGINE=MyISAM;
INSERT INTO t2 VALUES (50);
CREATE ALGORITHM=TEMPTABLE VIEW v1 AS SELECT * FROM t1;
SELECT ( SELECT COUNT(*) FROM v1 WHERE a = t2.b ) AS f FROM t2 GROUP BY f;
f 0
EXPLAIN FORMAT=JSON
SELECT ( SELECT COUNT(*) FROM v1 WHERE a = t2.b ) AS f FROM t2 GROUP BY f;
EXPLAIN
{ "query_block": { "select_id": 1, "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "system", "rows": 1, "filtered": 100
}
}
], "subqueries": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a = 50", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 50"
}
}
]
}
}
}
}
]
}
}
]
}
}
CREATE TABLE t3 (a INT, b INT) ENGINE=MYISAM;
INSERT INTO t3 VALUES (1,10),(3,11),(2,10),(2,20),(3,21);
CREATE VIEW v2 AS SELECT a, sum(b) AS s FROM t3 GROUP BY a ;
SELECT ( SELECT COUNT(*) FROM v2 WHERE s < t2.b ) AS f FROM t2 GROUP BY f;
f 3
EXPLAIN FORMAT=JSON
SELECT ( SELECT COUNT(*) FROM v2 WHERE s < t2.b ) AS f FROM t2 GROUP BY f;
EXPLAIN
{ "query_block": { "select_id": 1, "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "system", "rows": 1, "filtered": 100
}
}
], "subqueries": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 5, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v2.s < 50", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "s < 50", "filesort": { "sort_key": "t3.a", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t3", "access_type": "ALL", "loops": 1, "rows": 5, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
]
}
}
DROP VIEW v1,v2;
DROP TABLE t1,t2,t3;
#
# MDEV-10882: pushdown of the predicate with cached value
#
CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL) ENGINE=MyISAM;
CREATE ORREPLACE ALGORITHM=TEMPTABLE VIEW v1 AS SELECT * FROM t1;
INSERT INTO t1 VALUES (1,2),(3,4);
CREATE TABLE t2 (c INT NOT NULL) ENGINE=MyISAM;
INSERT INTO t2 VALUES (5),(6);
SELECT a, GROUP_CONCAT(b) FROM v1
WHERE b IN ( SELECT COUNT(c) FROM t2 ) GROUP BY a;
a GROUP_CONCAT(b) 12
EXPLAIN FORMAT=JSON
SELECT a, GROUP_CONCAT(b) FROM v1
WHERE b IN ( SELECT COUNT(c) FROM t2 ) GROUP BY a;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<subquery2>", "access_type": "system", "rows": 0, "filtered": 0, "materialized": { "unique": 1, "materialization": { "query_block": { "select_id": 2, "table": { "message": "Select tables optimized away"
}
}
}
}
}
},
{ "read_sorted_file": { "filesort": { "sort_key": "v1.a", "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.b = 2", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b = 2"
}
}
]
}
}
}
}
}
}
]
}
}
DROP VIEW v1;
DROP TABLE t1,t2;
#
# MDEV-10836: pushdown of the predicate with cached value
#
CREATE TABLE t (pk INT PRIMARY KEY, f INT) ENGINE=MyISAM;
CREATE ALGORITHM=TEMPTABLE VIEW v AS SELECT * FROM t;
INSERT INTO t VALUES (1,1),(3,2);
SELECT * FROM v AS v1, v AS v2
WHERE v2.pk > v1.f AND v1.f IN ( SELECT COUNT(pk) FROM t );
pk f pk f 3232
EXPLAIN FORMAT=JSON
SELECT * FROM v AS v1, v AS v2
WHERE v2.pk > v1.f AND v1.f IN ( SELECT COUNT(pk) FROM t );
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<subquery2>", "access_type": "system", "rows": 0, "filtered": 0, "materialized": { "unique": 1, "materialization": { "query_block": { "select_id": 2, "table": { "message": "Select tables optimized away"
}
}
}
}
}
},
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.f = 2", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t.f = 2"
}
}
]
}
}
}
},
{ "block-nl-join": { "table": { "table_name": "<derived4>", "access_type": "ALL", "loops": 2, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v2.pk > 2"
}, "buffer_type": "flat", "buffer_size": "119", "join_type": "BNL", "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t", "access_type": "range", "possible_keys": ["PRIMARY"], "key": "PRIMARY", "key_length": "4", "used_key_parts": ["pk"], "loops": 1, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "index_condition": "t.pk > 2"
}
}
]
}
}
}
}
]
}
}
DROP VIEW v;
DROP TABLE t;
#
# MDEV-11488: pushdown of the predicate with cached value
#
CREATE TABLE t1 (i INT) ENGINE=MyISAM;
INSERT INTO t1 VALUES (1),(3),(2);
CREATE TABLE t2 (j INT, KEY(j)) ENGINE=MyISAM;
INSERT INTO t2 VALUES (3),(4);
SELECT * FROM ( SELECT DISTINCT * FROM t1 ) AS sq
WHERE i IN ( SELECT MIN(j) FROM t2 );
i 3
EXPLAIN FORMAT=JSON
SELECT * FROM ( SELECT DISTINCT * FROM t1 ) AS sq
WHERE i IN ( SELECT MIN(j) FROM t2 );
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<subquery3>", "access_type": "system", "rows": 0, "filtered": 0, "materialized": { "unique": 1, "materialization": { "query_block": { "select_id": 3, "table": { "message": "Select tables optimized away"
}
}
}
}
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "sq.i = 3", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.i = 3"
}
}
]
}
}
}
}
]
}
}
UPDATE t2 SET j = 2 WHERE j = 3;
SELECT * FROM ( SELECT DISTINCT * FROM t1 ) AS sq
WHERE i IN ( SELECT MIN(j) FROM t2 );
i 2
DROP TABLE t1,t2;
CREATE TABLE t1 (i FLOAT) ENGINE=MyISAM;
INSERT INTO t1 VALUES (1.5),(3.2),(2.71);
CREATE TABLE t2 (j FLOAT, KEY(j)) ENGINE=MyISAM;
INSERT INTO t2 VALUES (3.2),(2.71);
SELECT * FROM ( SELECT DISTINCT * FROM t1 ) AS sq
WHERE i IN ( SELECT MIN(j) FROM t2 );
i 2.71
EXPLAIN FORMAT=JSON
SELECT * FROM ( SELECT DISTINCT * FROM t1 ) AS sq
WHERE i IN ( SELECT MIN(j) FROM t2 );
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<subquery3>", "access_type": "system", "rows": 0, "filtered": 0, "materialized": { "unique": 1, "materialization": { "query_block": { "select_id": 3, "table": { "message": "Select tables optimized away"
}
}
}
}
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "sq.i = 2.71", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.i = 2.7100000381469727"
}
}
]
}
}
}
}
]
}
}
DROP TABLE t1,t2;
CREATE TABLE t1 (i DECIMAL(10,2)) ENGINE=MyISAM;
INSERT INTO t1 VALUES (1.5),(3.21),(2.47);
CREATE TABLE t2 (j DECIMAL(10,2), KEY(j)) ENGINE=MyISAM;
INSERT INTO t2 VALUES (3.21),(4.55);
SELECT * FROM ( SELECT DISTINCT * FROM t1 ) AS sq
WHERE i IN ( SELECT MIN(j) FROM t2 );
i 3.21
EXPLAIN FORMAT=JSON
SELECT * FROM ( SELECT DISTINCT * FROM t1 ) AS sq
WHERE i IN ( SELECT MIN(j) FROM t2 );
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<subquery3>", "access_type": "system", "rows": 0, "filtered": 0, "materialized": { "unique": 1, "materialization": { "query_block": { "select_id": 3, "table": { "message": "Select tables optimized away"
}
}
}
}
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "sq.i = 3.21", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.i = 3.21"
}
}
]
}
}
}
}
]
}
}
DROP TABLE t1,t2;
CREATE TABLE t1 (i VARCHAR(32)) ENGINE=MyISAM;
INSERT INTO t1 VALUES ('cc'),('aa'),('ddd');
CREATE TABLE t2 (j VARCHAR(16), KEY(j)) ENGINE=MyISAM;
INSERT INTO t2 VALUES ('bbb'),('aa');
SELECT * FROM ( SELECT DISTINCT * FROM t1 ) AS sq
WHERE i IN ( SELECT MIN(j) FROM t2 );
i
aa
EXPLAIN FORMAT=JSON
SELECT * FROM ( SELECT DISTINCT * FROM t1 ) AS sq
WHERE i IN ( SELECT MIN(j) FROM t2 );
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<subquery3>", "access_type": "system", "rows": 0, "filtered": 0, "materialized": { "unique": 1, "materialization": { "query_block": { "select_id": 3, "table": { "message": "Select tables optimized away"
}
}
}
}
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "sq.i = 'aa'", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.i = 'aa'"
}
}
]
}
}
}
}
]
}
}
DROP TABLE t1,t2;
CREATE TABLE t1 (i DATETIME) ENGINE=MyISAM;
INSERT INTO t1 VALUES
('2008-09-27 00:34:58'),('2007-05-28 00:00:00'), ('2009-07-25 09:21:20');
CREATE TABLE t2 (j DATETIME, KEY(j)) ENGINE=MyISAM;
INSERT INTO t2 VALUES
('2007-05-28 00:00:00'), ('2010-08-25 00:00:00');
SELECT * FROM ( SELECT DISTINCT * FROM t1 ) AS sq
WHERE i IN ( SELECT MIN(j) FROM t2 );
i 2007-05-2800:00:00
EXPLAIN FORMAT=JSON
SELECT * FROM ( SELECT DISTINCT * FROM t1 ) AS sq
WHERE i IN ( SELECT MIN(j) FROM t2 );
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<subquery3>", "access_type": "system", "rows": 0, "filtered": 0, "materialized": { "unique": 1, "materialization": { "query_block": { "select_id": 3, "table": { "message": "Select tables optimized away"
}
}
}
}
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "sq.i = '2007-05-28 00:00:00'", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.i = TIMESTAMP'2007-05-28 00:00:00'"
}
}
]
}
}
}
}
]
}
}
DROP TABLE t1,t2;
CREATE TABLE t1 (i DATE) ENGINE=MyISAM;
INSERT INTO t1 VALUES ('2008-09-27'),('2007-05-28'), ('2009-07-25');
CREATE TABLE t2 (j DATE, KEY(j)) ENGINE=MyISAM;
INSERT INTO t2 VALUES ('2007-05-28'), ('2010-08-25');
SELECT * FROM ( SELECT DISTINCT * FROM t1 ) AS sq
WHERE i IN ( SELECT MIN(j) FROM t2 );
i 2007-05-28
EXPLAIN FORMAT=JSON
SELECT * FROM ( SELECT DISTINCT * FROM t1 ) AS sq
WHERE i IN ( SELECT MIN(j) FROM t2 );
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<subquery3>", "access_type": "system", "rows": 0, "filtered": 0, "materialized": { "unique": 1, "materialization": { "query_block": { "select_id": 3, "table": { "message": "Select tables optimized away"
}
}
}
}
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "sq.i = '2007-05-28'", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.i = DATE'2007-05-28'"
}
}
]
}
}
}
}
]
}
}
DROP TABLE t1,t2;
CREATE TABLE t1 (i TIME) ENGINE=MyISAM;
INSERT INTO t1 VALUES ('00:34:58'),('10:00:02'), ('09:21:20');
CREATE TABLE t2 (j TIME, KEY(j)) ENGINE=MyISAM;
INSERT INTO t2 VALUES ('10:00:02'), ('11:00:10');
SELECT * FROM ( SELECT DISTINCT * FROM t1 ) AS sq
WHERE i IN ( SELECT MIN(j) FROM t2 );
i 10:00:02
EXPLAIN FORMAT=JSON
SELECT * FROM ( SELECT DISTINCT * FROM t1 ) AS sq
WHERE i IN ( SELECT MIN(j) FROM t2 );
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<subquery3>", "access_type": "system", "rows": 0, "filtered": 0, "materialized": { "unique": 1, "materialization": { "query_block": { "select_id": 3, "table": { "message": "Select tables optimized away"
}
}
}
}
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "sq.i = '10:00:02'", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.i = TIME'10:00:02'"
}
}
]
}
}
}
}
]
}
}
DROP TABLE t1,t2;
#
# MDEV-11593: pushdown of condition with NULLIF
#
CREATE TABLE t1 (i INT);
CREATE ORREPLACE ALGORITHM=TEMPTABLE VIEW v1 AS SELECT * FROM t1;
INSERT INTO t1 VALUES (2), (1);
SELECT * FROM v1 WHERE NULLIF(1, i);
i 2
EXPLAIN FORMAT=JSON
SELECT * FROM v1 WHERE NULLIF(1, i);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "nullif(1,v1.i)", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "nullif(1,t1.i)"
}
}
]
}
}
}
}
]
}
}
DROP VIEW v1;
DROP TABLE t1;
#
# MDEV-11608: pushdown of the predicate with cached null value
#
CREATE TABLE t1 (c VARCHAR(3)) CHARSET=latin1;
CREATE ALGORITHM=TEMPTABLE VIEW v1 AS SELECT * FROM t1;
INSERT INTO t1 VALUES ('foo'),('bar');
CREATE TABLE t2 (c VARCHAR(3)) CHARSET=latin1;
INSERT INTO t2 VALUES ('foo'),('xyz');
SELECT * FROM v1 WHERE v1.c IN ( SELECT MIN(c) FROM t2 WHERE 0 );
c
EXPLAIN FORMAT=JSON
SELECT * FROM v1 WHERE v1.c IN ( SELECT MIN(c) FROM t2 WHERE 0 );
EXPLAIN
{ "query_block": { "select_id": 1, "table": { "message": "Impossible WHERE"
}, "subqueries": [
{ "materialization": { "query_block": { "select_id": 2, "table": { "message": "Impossible WHERE"
}
}
}
}
]
}
}
DROP VIEW v1;
DROP TABLE t1,t2;
CREATE TABLE t1 (d DECIMAL(10,2));
CREATE ALGORITHM=TEMPTABLE VIEW v1 AS SELECT * FROM t1;
INSERT INTO t1 VALUES (5.37),(1.1);
CREATE TABLE t2 (d DECIMAL(10,2));
INSERT INTO t2 VALUES ('1.1'),('2.23');
SELECT * FROM v1 WHERE v1.d IN ( SELECT MIN(d) FROM t2 WHERE 0 );
d
DROP VIEW v1;
DROP TABLE t1,t2;
#
# MDEV-11820: second execution of PS for query
# with false subquery predicate in WHERE
#
CREATE TABLE t1 (c VARCHAR(3)) ENGINE=MyISAM;
INSERT INTO t1 VALUES ('foo'),('bar');
CREATE ALGORITHM=TEMPTABLE VIEW v1 AS SELECT * FROM t1;
CREATE TABLE t2 (a INT);
INSERT INTO t2 VALUES (3), (4);
PREPARE stmt1 FROM " SELECT * FROM v1 WHERE 1 IN (SELECT a FROM t2) OR c = 'foo'";
PREPARE stmt2 FROM "EXPLAIN FORMAT=JSON
SELECT * FROM v1 WHERE 1 IN (SELECT a FROM t2) OR c = 'foo'";
EXECUTE stmt1;
c
foo
EXECUTE stmt2;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.c = 'foo'", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.c = 'foo'"
}
}
]
}
}
}
}
], "subqueries": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "1 = t2.a"
}
}
]
}
}
]
}
}
INSERT INTO t2 SELECT a+1 FROM t2;
INSERT INTO t2 SELECT a+1 FROM t2;
INSERT INTO t2 SELECT a+1 FROM t2;
INSERT INTO t2 SELECT a+1 FROM t2;
INSERT INTO t2 SELECT a+1 FROM t2;
INSERT INTO t2 SELECT a+1 FROM t2;
EXECUTE stmt1;
c
foo
EXECUTE stmt2;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "<cache>(<in_optimizer>(1,<exists>(subquery#2))) or v1.c = 'foo'", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
], "subqueries": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 128, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "1 = t2.a"
}
}
]
}
}
]
}
}
DEALLOCATE PREPARE stmt1;
DEALLOCATE PREPARE stmt2;
DROP VIEW v1;
DROP TABLE t1,t2;
#
# MDEV-12373: pushdown into derived with side effects is prohibited
#
CREATE TABLE sales_documents (
id int NOT NULL AUTO_INCREMENT,
sale_id int NULL DEFAULT NULL,
type tinyint unsigned NULL DEFAULT NULL,
data text NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
date date NULL DEFAULT NULL,
order_number int unsigned NULL DEFAULT NULL,
created_at int NULL DEFAULT NULL,
updated_at int NULL DEFAULT NULL,
generated tinyint NOT NULL DEFAULT '0',
synced_at int NOT NULL DEFAULT '0',
sum decimal(13,2) NOT NULL DEFAULT '0',
PRIMARY KEY (id)
);
INSERT INTO sales_documents
(id, sale_id, type, order_number, data, created_at,
updated_at, date, generated, synced_at, sum)
VALUES
(555, 165, 3, 5, '{}', 1486538300, 1486722835, '2017-02-17', 0, 1486538313, 2320.00),
(556, 165, 2, 3, '{}', 1486538304, 1486563125, '2017-02-08', 1, 1486538302, 2320.00),
(557, 158, 2, 2, '{}', 1486538661, 1486538661, '2017-02-08', 0, 1486538660, 2320.00),
(558, 171, 1, 3, '{}', 1486539104, 1488203405, '2017-02-08', 1, 1486539102, 23230.00),
(559, 171, 2, 5, '{}', 1486549233, 1487146010, '2017-02-08', 1, 1486549225, 37690.00),
(560, 172, 1, 1, '{}', 1486658260, 1488203409, '2017-02-09', 1, 1486658256, 40312.00),
(561, 172, 2, 1, '{}', 1486711997, 1486711997, '2017-02-10', 1, 1486711996, 40312.00),
(562, 172, 3, 1, '{}', 1486712104, 1486721395, '2017-02-10', 1, 1486712101, 40312.00),
(563, 171, 3, 2, '{}', 1486712953, 1486720244, '2017-02-10', 1, 1486712910, 23230.00),
(564, 170, 1, 2, '{}', 1486715948, 1488203410, '2017-02-10', 1, 1486715930, 28873.00),
(565, 170, 3, 3, '{}', 1486716782, 1486717426, '2017-02-10', 1, 1486716779, 61948.00),
(566, 166, 3, 4, '{}', 1486720947, 1486720947, '2017-02-10', 1, 1486720945, 4640.00),
(567, 167, 3, 5, '{}', 1486722741, 1486722783, '2017-02-26', 0, 1486722738, 14755.00),
(568, 165, 1, 4, '{}', 1486722849, 1486722849, '2017-02-10', 0, 1486722846, 2320.00),
(569, 173, 2, 2, '{}', 1486723073, 1487071275, '2017-02-10', 1, 1486723071, 14282.00),
(570, 173, 1, 4, '{}', 1486723100, 1488203412, '2017-02-10', 1, 1486723099, 14282.00),
(571, 167, 2, 4, '{}', 1486730859, 1486730859, '2017-02-10', 1, 1486730856, 18655.00),
(572, 167, 1, 5, '{}', 1486730883, 1488203412, '2017-02-10', 1, 1486730877, 18655.00),
(573, 174, 2, 51, '{}', 1486731622, 1487060259, '2017-02-10', 1, 1486731620, 7140.00),
(574, 174, 3, 5, '{}', 1486993472, 1486993472, '2017-02-13', 1, 1488216147, 28020.00),
(575, 174, 1, 6, '{}', 1486993530, 1488203412, '2017-02-13', 1, 1486993505, 7140.00),
(576, 173, 3, 6, '{}', 1487071425, 1487071425, '2017-02-14', 0, 1487071422, 14282.00),
(577, 178, 2, 6, '{}', 1487327372, 1487327372, '2017-02-17', 1, 1487327370, 12321.00),
(578, 177, 2, 7, '{}', 1487327394, 1487327394, '2017-02-17', 0, 1487327391, 4270.00),
(579, 182, 3, 6, '{}', 1487750589, 1487751693, '2017-02-22', 1, 1487751688, 4270.00),
(580, 182, 2, 7, '{}', 1487750601, 1487750663, '2017-02-22', 1, 1487750598, 4270.00),
(581, 182, 1, 7, '{}', 1487750694, 1488203412, '2017-02-22', 1, 1487750692, 4270.00),
(582, 185, 3, 7, '{}', 1487774051, 1487774051, '2017-02-22', 0, 1487774043, 8913.00),
(583, 184, 3, 7, '{}', 1487774071, 1487774235, '2017-02-22', 0, 1487774093, 3285.00),
(584, 184, 2, 8, '{}', 1487774074, 1487774074, '2017-02-22', 0, 1487774073, 3285.00),
(585, 184, 1, 8, '{}', 1487774081, 1487774081, '2017-02-22', 0, 1487774075, 3285.00),
(586, 193, 2, 8, '{}', 1487955294, 1487955318, '2017-02-24', 0, 1487955311, 4270.00),
(587, 193, 1, 8, '{}', 1487955324, 1487955324, '2017-02-24', 0, 1487955320, 4270.00),
(588, 193, 3, 7, '{}', 1487955341, 1487955341, '2017-02-24', 0, 1487955325, 4270.00),
(589, 186, 1, 8, '{}', 1487957291, 1487957464, '2017-02-24', 0, 1487957459, 6960.00),
(590, 186, 2, 8, '{}', 1487957308, 1487957468, '2017-02-24', 0, 1487957465, 6960.00),
(591, 186, 3, 7, '{}', 1487957312, 1487957473, '2017-02-24', 0, 1487957469, 6960.00),
(592, 194, 1, 8, '{}', 1488193293, 1488203412, '2017-02-27', 1, 1488193280, 2320.00),
(593, 194, 2, 8, '{}', 1488193304, 1488193304, '2017-02-27', 1, 1488193303, 2320.00),
(594, 210, 1, 9, '{}', 1488198896, 1488198896, '2017-02-27', 0, 1488198885, 4270.00),
(595, 210, 2, 12, '{}', 1488198901, 1488198901, '2017-02-27', 1, 1488532585, 4270.00),
(596, 210, 3, 10, '{}', 1488198904, 1488198904, '2017-02-27', 1, 1488532565, 4270.00),
(597, 209, 2, 9, '{}', 1488200016, 1488450772, '2017-02-27', 1, 1488450449, 4270.00),
(598, 209, 1, 9, '{}', 1488200020, 1488200063, '2017-02-27', 1, 1488200017, 4271.00),
(599, 209, 3, 7, '{}', 1488200053, 1488200053, '2017-02-27', 0, 1488200021, 4271.00),
(600, 211, 2, 10, '{}', 1488216265, 1489402027, '2017-02-27', 1, 1488216264, 2320.00),
(601, 211, 3, 7, '{}', 1488216281, 1488216281, '2017-02-27', 1, 1488216276, 2320.00),
(602, 211, 1, 10, '{}', 1488216283, 1488216283, '2017-02-27', 1, 1488216282, 2320.00),
(603, 198, 2, 11, '{}', 1488280125, 1488280125, '2017-02-28', 0, 1488280095, 4270.00),
(604, 198, 1, 11, '{}', 1488280160, 1488280160, '2017-02-28', 0, 1488280126, 4270.00),
(605, 198, 3, 8, '{}', 1488280440, 1488280440, '2017-02-28', 0, 1488280435, 4270.00),
(606, 212, 1, 12, '{}', 1488286301, 1489402168, '2017-02-28', 1, 1488286295, 13825.00),
(607, 212, 3, 8, '{}', 1488289644, 1488289690, '2017-02-28', 1, 1488289642, 25295.00),
(608, 212, 2, 13, '{}', 1488290350, 1488290431, '2017-02-28', 1, 1488290347, 13133.75),
(609, 213, 1, 11, '{}', 1488529470, 1488529470, '2017-03-03', 1, 1488529461, 5660.00),
(610, 213, 2, 11, '{}', 1488529484, 1488529484, '2017-03-03', 1, 1488529479, 5660.00),
(611, 213, 3, 9, '{}', 1488529493, 1488529493, '2017-03-03', 1, 1488529489, 5660.00),
(612, 197, 2, 13, '{}', 1489400715, 1489400715, '2017-03-13', 0, 1489398959, 4270.00),
(613, 219, 3, 11, '{}', 1490084337, 1490181958, '2017-03-21', 1, 1490084334, 73526.00),
(614, 216, 3, 11, '{}', 1490085757, 1490086717, '2017-03-21', 0, 1490085755, 5377.00);
SELECT * FROM
(SELECT @row := @row + 1 as row, a.* from (
SELECT t.order_number
FROM sales_documents t
WHERE
t.type = 2AND
t.date >= '2017-01-01'AND
t.date <= '2017-12-31'AND
t.order_number IS NOT NULL AND
t.generated = 1
GROUP BY t.order_number
) a, (SELECT @row := 0) r) t
WHERE row <> order_number;
row order_number 1451
DROP TABLE sales_documents;
#
# MDEV-12845: pushdown from merged derived using equalities
#
create table t1 (a int);
insert into t1 values
(4), (8), (5), (3), (10), (2), (7);
create table t2 (b int, c int);
insert into t2 values
(2,1), (5,2), (2,2), (4,1), (4,3),
(5,3), (2,4), (4,6), (2,1);
create view v1 as
select b, sum(c) as s from t2 group by b;
create view v2 as
select distinct b, c from t2;
create view v3 as
select b, max(c) as m from t2 group by b;
select b
from ( select t1.a, v1.b, v1.s from t1, v1 where t1.a = v1.b ) as t
where b > 2;
b 4 5
explain format=json select b
from ( select t1.a, v1.b, v1.s from t1, v1 where t1.a = v1.b ) as t
where b > 2;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 7, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 2 and t1.a is not null"
}
},
{ "table": { "table_name": "<derived3>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["b"], "ref": ["test.t1.a"], "loops": 7, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "filesort": { "sort_key": "t2.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.b > 2"
}
}
]
}
}
}
}
}
}
]
}
}
select a
from ( select t1.a, v1.b, v1.s from t1, v1 where t1.a = v1.b ) as t
where a > 2;
a 4 5
explain format=json select a
from ( select t1.a, v1.b, v1.s from t1, v1 where t1.a = v1.b ) as t
where a > 2;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 7, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 2 and t1.a is not null"
}
},
{ "table": { "table_name": "<derived3>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["b"], "ref": ["test.t1.a"], "loops": 7, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "filesort": { "sort_key": "t2.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.b > 2"
}
}
]
}
}
}
}
}
}
]
}
}
select a
from ( select t1.a, v2.b, v2.c from t1, v2 where t1.a = v2.b ) as t
where a > 2;
a 4 4 4 5 5
explain format=json select a
from ( select t1.a, v2.b, v2.c from t1, v2 where t1.a = v2.b ) as t
where a > 2;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 7, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 2 and t1.a is not null"
}
},
{ "table": { "table_name": "<derived3>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["b"], "ref": ["test.t1.a"], "loops": 7, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.b > 2"
}
}
]
}
}
}
}
}
]
}
}
select a
from ( select t1.a, v3.b, v3.m from t1, v3 where t1.a = v3.m ) as t
where a > 2;
a 4 3
explain format=json select a
from ( select t1.a, v3.b, v3.m from t1, v3 where t1.a = v3.m ) as t
where a > 2;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 7, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 2 and t1.a is not null"
}
},
{ "table": { "table_name": "<derived3>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["m"], "ref": ["test.t1.a"], "loops": 7, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "m > 2", "filesort": { "sort_key": "t2.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
drop view v1,v2,v3;
drop table t1,t2;
#
# MDEV-13166: pushdown from merged derived
#
CREATE TABLE t1 (i int) ENGINE=MyISAM;
INSERT INTO t1 VALUES (1),(2);
CREATE VIEW v1 AS SELECT MAX(i) AS f FROM t1;
SELECT * FROM ( SELECT * FROM v1 ) AS sq WHERE f > 0;
f 2
explain format=json SELECT * FROM ( SELECT * FROM v1 ) AS sq WHERE f > 0;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.f > 0", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "f > 0", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
]
}
}
DROP VIEW v1;
DROP TABLE t1;
#
# MDEV-13193: pushdown of equality extracted from multiple equality
#
CREATE TABLE t1 (i1 int, KEY(i1)) ENGINE=MyISAM;
INSERT INTO t1 VALUES (1),(2);
CREATE TABLE t2 (i2 int) ENGINE=MyISAM;
INSERT INTO t2 VALUES (2),(4);
CREATE ALGORITHM=TEMPTABLE VIEW v2 AS SELECT * FROM t2;
SELECT * FROM t1, ( SELECT * FROM v2 ) AS sq
WHERE i1 = 1AND ( i1 = i2 OR i1 = 2 );
i1 i2
explain format=json SELECT * FROM t1, ( SELECT * FROM v2 ) AS sq
WHERE i1 = 1AND ( i1 = i2 OR i1 = 2 );
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ref", "possible_keys": ["i1"], "key": "i1", "key_length": "5", "used_key_parts": ["i1"], "ref": ["const"], "loops": 1, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "using_index": true
}
},
{ "block-nl-join": { "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v2.i2 = 1"
}, "buffer_type": "flat", "buffer_size": "65", "join_type": "BNL", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.i2 = 1"
}
}
]
}
}
}
}
]
}
}
DROP VIEW v2;
DROP TABLE t1,t2;
#
# MDEV-14237: derived with regexp_substr() in select list
#
create table t1 (a char(8));
insert into t1 values ('b'), ('a'), ('xx');
select *
from ( select distinct regexp_substr(t1.a,'^[A-Za-z]+') as f from t1) as t
where t.f = 'a'or t.f = 'b';
f
b
a
explain format=json select *
from ( select distinct regexp_substr(t1.a,'^[A-Za-z]+') as f from t1) as t
where t.f = 'a'or t.f = 'b';
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t.f = 'a' or t.f = 'b'", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
]
}
}
drop table t1;
#
# MDEV-13454: consequence of mdev-14368 fixed for 5.5
# SET sql_mode = 'ONLY_FULL_GROUP_BY';
create table t1 (id int, id2 int);
insert into t1 values (1,1),(2,3),(3,4),(7,2);
create table t2(id2 int);
insert t2 values (1),(2),(3);
SELECT * FROM t1
LEFT OUTER JOIN
(SELECT id2, COUNT(*) as ct FROM t2 GROUP BY id2) vc USING (id2)
WHERE (vc.ct>0);
id2 id ct 111 321 271
EXPLAIN FORMAT=JSON SELECT * FROM t1
LEFT OUTER JOIN
(SELECT id2, COUNT(*) as ct FROM t2 GROUP BY id2) vc USING (id2)
WHERE (vc.ct>0);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 4, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.id2 is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["id2"], "ref": ["test.t1.id2"], "loops": 4, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "vc.ct > 0", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "ct > 0", "filesort": { "sort_key": "t2.id2", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
DROP TABLE t1,t2; SET sql_mode = DEFAULT;
#
# MDEV-15579: incorrect removal of sub-formulas to be pushed
# into WHERE of materialized derived with GROUP BY
#
CREATE TABLE t1 (a INT, b INT, c INT, d INT);
CREATE TABLE t2 (x INT, y INT, z INT);
INSERT INTO t1 VALUES (1,1,66,1), (1,1,56,2), (3,2,42,3);
INSERT INTO t2 VALUES (1,1,66), (1,12,32);
SELECT *
FROM t2,
(
SELECT a, b, max(c) AS max_c
FROM t1
GROUP BY a
HAVING max_c > 37
) AS v1
WHERE (v1.a=1) AND (v1.b=v1.a) AND
(v1.a=t2.x) AND (v1.max_c>30);
x y z a b max_c 11661166 112321166
EXPLAIN SELECT *
FROM t2,
(
SELECT a, b, max(c) AS max_c
FROM t1
GROUP BY a
HAVING max_c > 37
) AS v1
WHERE (v1.a=1) AND (v1.b=v1.a) AND
(v1.a=t2.x) AND (v1.max_c>30);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 3 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 3 Using where
EXPLAIN FORMAT=JSON SELECT *
FROM t2,
(
SELECT a, b, max(c) AS max_c
FROM t1
GROUP BY a
HAVING max_c > 37
) AS v1
WHERE (v1.a=1) AND (v1.b=v1.a) AND
(v1.a=t2.x) AND (v1.max_c>30);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.x = 1"
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 2, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a = 1 and v1.b = 1 and v1.max_c > 30"
}, "buffer_type": "flat", "buffer_size": "173", "join_type": "BNL", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c > 37 and max_c > 30", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 1 and t1.b = 1"
}
}
]
}
}
}
}
]
}
}
SELECT *
FROM t2,
(
SELECT a, b, d, max(c) AS max_c
FROM t1
GROUP BY a,d
HAVING max_c > 37
) AS v1
WHERE (v1.a=1) AND (v1.b=v1.a) AND (v1.b=v1.d) AND
(v1.a=t2.x) AND (v1.max_c>30);
x y z a b d max_c 116611166 1123211166
EXPLAIN SELECT *
FROM t2,
(
SELECT a, b, d, max(c) AS max_c
FROM t1
GROUP BY a,d
HAVING max_c > 37
) AS v1
WHERE (v1.a=1) AND (v1.b=v1.a) AND (v1.b=v1.d) AND
(v1.a=t2.x) AND (v1.max_c>30);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 3 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 3 Using where
EXPLAIN FORMAT=JSON SELECT *
FROM t2,
(
SELECT a, b, d, max(c) AS max_c
FROM t1
GROUP BY a,d
HAVING max_c > 37
) AS v1
WHERE (v1.a=1) AND (v1.b=v1.a) AND (v1.b=v1.d) AND
(v1.a=t2.x) AND (v1.max_c>30);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.x = 1"
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 2, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a = 1 and v1.b = 1 and v1.d = 1 and v1.max_c > 30"
}, "buffer_type": "flat", "buffer_size": "173", "join_type": "BNL", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "max_c > 37 and max_c > 30", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 1 and t1.b = 1 and t1.d = 1"
}
}
]
}
}
}
}
]
}
}
DROP TABLE t1,t2;
#
# MDEV-15765: pushing condition with temporal constants
# into constant tables
#
select * from (select date('2018-01-01') as d
union all
select date('2018-01-01') as d) as t
where t.d between date ('2017-01-01') and date ('2019-01-01');
d 2018-01-01 2018-01-01
select * from (select date('2018-01-01') as d) as t
where t.d between date ('2017-01-01') and date ('2019-01-01');
d 2018-01-01
#
# MDEV-16088: pushdown into derived defined in the IN subquery
#
CREATE TABLE t1 (a INT, b INT);
CREATE TABLE t2 (e INT, f INT, g INT);
INSERT INTO t1 VALUES (1,14),(2,13),(1,19),(2,32),(3,24);
INSERT INTO t2 VALUES (1,19,2),(3,24,1),(1,12,2),(3,11,3),(2,32,1);
SELECT * FROM t1
WHERE (t1.a,t1.b) IN
(
SELECT d_tab.e,d_tab.max_f
FROM (
SELECT t2.e, MAX(t2.f) AS max_f
FROM t2
GROUP BY t2.e
HAVING max_f>18
) as d_tab
WHERE d_tab.e>1
) ;
a b 232 324
EXPLAIN SELECT * FROM t1
WHERE (t1.a,t1.b) IN
(
SELECT d_tab.e,d_tab.max_f
FROM (
SELECT t2.e, MAX(t2.f) AS max_f
FROM t2
GROUP BY t2.e
HAVING max_f>18
) as d_tab
WHERE d_tab.e>1
) ;
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t1 ALL NULL NULL NULL NULL 5 Using where 1 PRIMARY <derived3> eq_ref distinct_key distinct_key 10 test.t1.a,test.t1.b 1 3 DERIVED t2 ALL NULL NULL NULL NULL 5 Using where; Using temporary; Using filesort
EXPLAIN FORMAT=JSON SELECT * FROM t1
WHERE (t1.a,t1.b) IN
(
SELECT d_tab.e,d_tab.max_f
FROM (
SELECT t2.e, MAX(t2.f) AS max_f
FROM t2
GROUP BY t2.e
HAVING max_f>18
) as d_tab
WHERE d_tab.e>1
) ;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 5, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 1 and t1.a is not null and t1.b is not null"
}
},
{ "table": { "table_name": "<derived3>", "access_type": "eq_ref", "possible_keys": ["distinct_key"], "key": "distinct_key", "key_length": "10", "used_key_parts": ["e", "max_f"], "ref": ["test.t1.a", "test.t1.b"], "loops": 5, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_f > 18", "filesort": { "sort_key": "t2.e", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 5, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.e > 1"
}
}
]
}
}
}
}
}
}
]
}
}
SELECT * FROM t1
WHERE (t1.a,t1.b) IN
(
SELECT d_tab.e,d_tab.max_f
FROM (
SELECT t2.e, MAX(t2.f) AS max_f
FROM t2
GROUP BY t2.e
HAVING max_f>18
) as d_tab
WHERE d_tab.max_f<25
) ;
a b 119 324
EXPLAIN SELECT * FROM t1
WHERE (t1.a,t1.b) IN
(
SELECT d_tab.e,d_tab.max_f
FROM (
SELECT t2.e, MAX(t2.f) AS max_f
FROM t2
GROUP BY t2.e
HAVING max_f>18
) as d_tab
WHERE d_tab.max_f<25
) ;
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t1 ALL NULL NULL NULL NULL 5 Using where 1 PRIMARY <derived3> eq_ref distinct_key distinct_key 10 test.t1.a,test.t1.b 1 3 DERIVED t2 ALL NULL NULL NULL NULL 5 Using temporary; Using filesort
EXPLAIN FORMAT=JSON SELECT * FROM t1
WHERE (t1.a,t1.b) IN
(
SELECT d_tab.e,d_tab.max_f
FROM (
SELECT t2.e, MAX(t2.f) AS max_f
FROM t2
GROUP BY t2.e
HAVING max_f>18
) as d_tab
WHERE d_tab.max_f<25
) ;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 5, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b < 25 and t1.a is not null and t1.b is not null"
}
},
{ "table": { "table_name": "<derived3>", "access_type": "eq_ref", "possible_keys": ["distinct_key"], "key": "distinct_key", "key_length": "10", "used_key_parts": ["e", "max_f"], "ref": ["test.t1.a", "test.t1.b"], "loops": 5, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_f > 18 and max_f < 25", "filesort": { "sort_key": "t2.e", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 5, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
SELECT * FROM t1
WHERE (t1.a,t1.b) IN
(
SELECT d_tab.e, MAX(d_tab.max_f) AS max_f
FROM (
SELECT t2.e, MAX(t2.f) as max_f, t2.g
FROM t2
GROUP BY t2.e
) as d_tab
WHERE d_tab.e>1
GROUP BY d_tab.g
) ;
a b 232
EXPLAIN SELECT * FROM t1
WHERE (t1.a,t1.b) IN
(
SELECT d_tab.e, MAX(d_tab.max_f) AS max_f
FROM (
SELECT t2.e, MAX(t2.f) as max_f, t2.g
FROM t2
GROUP BY t2.e
) as d_tab
WHERE d_tab.e>1
GROUP BY d_tab.g
) ;
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t1 ALL NULL NULL NULL NULL 5 Using where 1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 8 test.t1.a,test.t1.b 1 2 MATERIALIZED <derived3> ALL NULL NULL NULL NULL 5 Using where; Using temporary 3 DERIVED t2 ALL NULL NULL NULL NULL 5 Using where; Using temporary; Using filesort
EXPLAIN FORMAT=JSON SELECT * FROM t1
WHERE (t1.a,t1.b) IN
(
SELECT d_tab.e, MAX(d_tab.max_f) AS max_f
FROM (
SELECT t2.e, MAX(t2.f) as max_f, t2.g
FROM t2
GROUP BY t2.e
) as d_tab
WHERE d_tab.e>1
GROUP BY d_tab.g
) ;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 5, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a is not null and t1.b is not null"
}
},
{ "table": { "table_name": "<subquery2>", "access_type": "eq_ref", "possible_keys": ["distinct_key"], "key": "distinct_key", "key_length": "8", "used_key_parts": ["e", "max_f"], "ref": ["test.t1.a", "test.t1.b"], "loops": 5, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "unique": 1, "materialization": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 5, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "d_tab.e > 1", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "filesort": { "sort_key": "t2.e", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 5, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.e > 1"
}
}
]
}
}
}
}
}
}
]
}
}
}
}
}
}
]
}
}
SELECT * FROM t1
WHERE (t1.a,t1.b) IN
(
SELECT d_tab.e, MAX(d_tab.max_f) AS max_f
FROM (
SELECT t2.e, MAX(t2.f) as max_f, t2.g
FROM t2
GROUP BY t2.e
) as d_tab
WHERE d_tab.max_f>20
GROUP BY d_tab.g
) ;
a b 232
EXPLAIN SELECT * FROM t1
WHERE (t1.a,t1.b) IN
(
SELECT d_tab.e, MAX(d_tab.max_f) AS max_f
FROM (
SELECT t2.e, MAX(t2.f) as max_f, t2.g
FROM t2
GROUP BY t2.e
) as d_tab
WHERE d_tab.max_f>20
GROUP BY d_tab.g
) ;
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t1 ALL NULL NULL NULL NULL 5 Using where 1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 8 test.t1.a,test.t1.b 1 2 MATERIALIZED <derived3> ALL NULL NULL NULL NULL 5 Using where; Using temporary 3 DERIVED t2 ALL NULL NULL NULL NULL 5 Using temporary; Using filesort
EXPLAIN FORMAT=JSON SELECT * FROM t1
WHERE (t1.a,t1.b) IN
(
SELECT d_tab.e, MAX(d_tab.max_f) AS max_f
FROM (
SELECT t2.e, MAX(t2.f) as max_f, t2.g
FROM t2
GROUP BY t2.e
) as d_tab
WHERE d_tab.max_f>20
GROUP BY d_tab.g
) ;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 5, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a is not null and t1.b is not null"
}
},
{ "table": { "table_name": "<subquery2>", "access_type": "eq_ref", "possible_keys": ["distinct_key"], "key": "distinct_key", "key_length": "8", "used_key_parts": ["e", "max_f"], "ref": ["test.t1.a", "test.t1.b"], "loops": 5, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "unique": 1, "materialization": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 5, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "d_tab.max_f > 20", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "max_f > 20", "filesort": { "sort_key": "t2.e", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 5, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
}
}
}
}
]
}
}
DROP TABLE t1,t2;
#
# MDEV-15765: pushing condition with IN subquery defined with constants
# using substitution
#
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1),(2);
SELECT * FROM
(
SELECT DISTINCT * FROM t1
) der_tab
WHERE (a>0AND a<2OR a IN (2,3)) AND
(a=2OR0);
a 2
DROP TABLE t1;
#
# MDEV-16386: pushing condition into the HAVING clause when ambiguous
# fields warning appears
#
CREATE TABLE t1 (a INT, b INT);
INSERT INTO t1 VALUES (1,2),(2,3),(3,4);
SELECT * FROM
(
SELECT t1.b AS a
FROM t1
GROUP BY t1.a
) dt
WHERE (dt.a=2);
a 2
EXPLAIN FORMAT=JSON SELECT * FROM
(
SELECT t1.b AS a
FROM t1
GROUP BY t1.a
) dt
WHERE (dt.a=2);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "dt.a = 2", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "a = 2", "filesort": { "sort_key": "t1.a", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
SELECT * FROM
(
SELECT t1.b AS a
FROM t1
GROUP BY t1.a
HAVING (t1.a<3)
) dt
WHERE (dt.a>1);
a 2 3
EXPLAIN FORMAT=JSON SELECT * FROM
(
SELECT t1.b AS a
FROM t1
GROUP BY t1.a
HAVING (t1.a<3)
) dt
WHERE (dt.a>1);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "dt.a > 1", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "a > 1", "filesort": { "sort_key": "t1.a", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 3"
}
}
]
}
}
}
}
}
}
]
}
}
SELECT * FROM
(
SELECT 'ab' AS a
FROM t1
GROUP BY t1.a
) dt
WHERE (dt.a='ab');
a
ab
ab
ab
EXPLAIN FORMAT=JSON SELECT * FROM
(
SELECT 'ab' AS a
FROM t1
GROUP BY t1.a
) dt
WHERE (dt.a='ab');
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "dt.a = 'ab'", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "filesort": { "sort_key": "t1.a", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
SELECT * FROM
(
SELECT 1 AS a
FROM t1
GROUP BY t1.a
) dt
WHERE (dt.a=1);
a 1 1 1
EXPLAIN FORMAT=JSON SELECT * FROM
(
SELECT 1 AS a
FROM t1
GROUP BY t1.a
) dt
WHERE (dt.a=1);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "dt.a = 1", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "filesort": { "sort_key": "t1.a", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
DROP TABLE t1;
#
# MDEV-16517: pushdown condition with the IN predicate defined
# with non-constant values
#
CREATE TABLE t1 (a INT, b INT);
INSERT INTO t1 VALUES (1,2),(1,3);
SELECT * FROM
(
SELECT t1.a
FROM t1
WHERE 1 IN (0,t1.a)
GROUP BY t1.a
) AS dt1
JOIN
(
SELECT t1.a
FROM t1
WHERE 1 IN (0,t1.a)
) AS dt2
ON dt1.a = dt2.a;
a a 11 11
EXPLAIN FORMAT=JSON SELECT * FROM
(
SELECT t1.a
FROM t1
WHERE 1 IN (0,t1.a)
GROUP BY t1.a
) AS dt1
JOIN
(
SELECT t1.a
FROM t1
WHERE 1 IN (0,t1.a)
) AS dt2
ON dt1.a = dt2.a;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "1 in (0,t1.a) and t1.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t1.a"], "loops": 2, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "filesort": { "sort_key": "t1.a", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "1 in (0,t1.a) and 1 in (0,t1.a)"
}
}
]
}
}
}
}
}
}
]
}
}
SELECT * FROM
(
SELECT t1.a,MAX(t1.b)
FROM t1
GROUP BY t1.a
) AS dt, t1
WHERE dt.a=t1.a AND dt.a IN (1,t1.a);
a MAX(t1.b) a b 1312 1313
EXPLAIN FORMAT=JSON SELECT * FROM
(
SELECT t1.a,MAX(t1.b)
FROM t1
GROUP BY t1.a
) AS dt, t1
WHERE dt.a=t1.a AND dt.a IN (1,t1.a);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a in (1,t1.a) and t1.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t1.a"], "loops": 2, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "filesort": { "sort_key": "t1.a", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a in (1,t1.a)"
}
}
]
}
}
}
}
}
}
]
}
}
DROP TABLE t1;
#
# MDEV-15087: error from inexpensive subquery before check
# for condition pushdown into derived
#
CREATE TABLE t1 (i1 int, v1 varchar(1));
INSERT INTO t1 VALUES (7,'x');
CREATE TABLE t2 (i1 int);
INSERT INTO t2 VALUES (8);
CREATE TABLE t3 (i1 int ,v1 varchar(1), v2 varchar(1));
INSERT INTO t3 VALUES (4, 'v','v'),(62,'v','k'),(7, 'n', NULL);
SELECT 1
FROM (t1 AS a1
JOIN (((SELECT DISTINCT t3.*
FROM t3) AS a2
JOIN t1 ON (t1.v1 = a2.v2))) ON (t1.v1 = a2.v1))
WHERE (SELECT BIT_COUNT(t2.i1)
FROM (t2 JOIN t3)) IS NULL; ERROR21000: Subquery returns more than 1 row
DROP TABLE t1, t2, t3;
#
# MDEV-16614signal7 after calling stored procedure, that uses regexp
#
CREATE PROCEDURE p1(m1 varchar(5), m2 varchar(5))
BEGIN
SELECT a FROM
(SELECT "aa" a) t
JOIN (SELECT "aa" b) t1 on t.a=t1.b
WHERE t.a regexp m1 and t1.b regexp m2
GROUP BY a;
END$$
CALL p1('a','a');
a
aa
DROP PROCEDURE p1;
CREATE PROCEDURE p1(m1 varchar(5))
BEGIN
SELECT a FROM (SELECT "aa" a) t WHERE t.a regexp m1;
END$$
CALL p1('a');
a
aa
DROP PROCEDURE p1;
SELECT a FROM (SELECT "aa" a) t WHERE REGEXP_INSTR(t.a, (SELECT MAX('aa') FROM DUAL LIMIT 1));
a
aa
CREATE ORREPLACE FUNCTION f1(a VARCHAR(10), b VARCHAR(10)) RETURNS INT
BEGIN RETURN1;
END;$$
CREATE ORREPLACE PROCEDURE p1(m1 varchar(5))
BEGIN
SELECT a FROM (SELECT "aa" a) t WHERE f1(t.a, m1);
END$$
CALL p1('a');
a
aa
DROP PROCEDURE p1;
DROP FUNCTION f1;
CREATE ORREPLACE FUNCTION f1(a VARCHAR(10), b VARCHAR(10)) RETURNS INT
BEGIN RETURN1;
END;$$
SELECT a FROM (SELECT "aa" a) t WHERE f1(t.a, (SELECT MAX('aa') FROM DUAL LIMIT 1));
a
aa
DROP FUNCTION f1;
#
# MDEV-17011: condition pushdown into materialized derived used
# in INSERT SELECT, multi-table UPDATE and DELETE
#
CREATE TABLE t1 (a int ,b int) ENGINE=MyISAM;
INSERT INTO t1 VALUES
(1, 1), (1, 2), (2, 1), (2, 2), (3,1), (3,3), (4,2);
CREATE TABLE t2 (a int) ENGINE MYISAM;
INSERT INTO t2 VALUES
(3), (7), (1), (4), (1);
CREATE TABLE t3 (a int, b int) ENGINE MYISAM;
EXPLAIN FORMAT=JSON INSERT INTO t3
SELECT * FROM (SELECT a, count(*) as c FROM t1 GROUP BY a) t WHERE a<=2;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 7, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t.a <= 2", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "filesort": { "sort_key": "t1.a", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 7, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a <= 2"
}
}
]
}
}
}
}
}
}
]
}
}
INSERT INTO t3
SELECT * FROM (SELECT a, count(*) as c FROM t1 GROUP BY a) t WHERE a<=2;
SELECT * FROM t3;
a b 12 22
EXPLAIN FORMAT=JSON UPDATE t2, (SELECT a, count(*) as c FROM t1 GROUP BY a) t SET t2.a=t.c+10
WHERE t2.a= t.c and t.a>=3;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 5, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "8", "used_key_parts": ["c"], "ref": ["test.t2.a"], "loops": 5, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a = t.c and t.a >= 3", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "filesort": { "sort_key": "t1.a", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 7, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a >= 3"
}
}
]
}
}
}
}
}
}
]
}
}
UPDATE t2, (SELECT a, count(*) as c FROM t1 GROUP BY a) t SET t2.a=t.c+10
WHERE t2.a= t.c and t.a>=3;
SELECT * FROM t2;
a 3 7 11 4 11
EXPLAIN FORMAT=JSON DELETE t2 FROM t2, (SELECT a, count(*) as c FROM t1 GROUP BY a) t
WHERE t2.a= t.c+9and t.a=2;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 5, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 5, "rows": 7, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t.a = 2 and t2.a = t.c + 9", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 7, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 2"
}
}
]
}
}
}
}
]
}
}
DELETE t2 FROM t2, (SELECT a, count(*) as c FROM t1 GROUP BY a) t
WHERE t2.a= t.c+9and t.a=2;
SELECT * FROM t2;
a 3 7 4
DROP TABLE t1,t2,t3;
#
# MDEV-16765: pushdown condition with the CASE structure
# defined with Item_cond item
#
CREATE TABLE t1(a INT, b INT);
INSERT INTO t1 VALUES (1,2), (3,4), (2,3);
SELECT *
FROM
(
SELECT CASE WHEN ((tab2.max_a=1) OR (tab2.max_a=2))
THEN 1 ELSE 0 END AS max_a,b
FROM (SELECT MAX(a) as max_a,b FROM t1 GROUP BY t1.b) AS tab2
) AS tab1
WHERE (tab1.max_a=1);
max_a b 12 13
EXPLAIN FORMAT=JSON SELECT *
FROM
(
SELECT CASE WHEN ((tab2.max_a=1) OR (tab2.max_a=2))
THEN 1 ELSE 0 END AS max_a,b
FROM (SELECT MAX(a) as max_a,b FROM t1 GROUP BY t1.b) AS tab2
) AS tab1
WHERE (tab1.max_a=1);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "case when tab2.max_a = 1 or tab2.max_a = 2 then 1 else 0 end = 1", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "case when max_a = 1 or max_a = 2 then 1 else 0 end = 1", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
SELECT *
FROM
(
SELECT CASE WHEN ((tab2.max_a=1) OR ((tab2.max_a>2) AND (tab2.max_a<4)))
THEN 1 ELSE 0 END AS max_a,b
FROM (SELECT MAX(a) as max_a,b FROM t1 GROUP BY t1.b) AS tab2
) AS tab1
WHERE (tab1.max_a=1);
max_a b 12 14
EXPLAIN FORMAT=JSON SELECT *
FROM
(
SELECT CASE WHEN ((tab2.max_a=1) OR ((tab2.max_a>2) AND (tab2.max_a<4)))
THEN 1 ELSE 0 END AS max_a,b
FROM (SELECT MAX(a) as max_a,b FROM t1 GROUP BY t1.b) AS tab2
) AS tab1
WHERE (tab1.max_a=1);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "case when tab2.max_a = 1 or tab2.max_a > 2 and tab2.max_a < 4 then 1 else 0 end = 1", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "case when max_a = 1 or max_a > 2 and max_a < 4 then 1 else 0 end = 1", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
SELECT *
FROM
(
SELECT CASE WHEN ((tab2.max_a>1) AND ((tab2.max_a=2) OR (tab2.max_a>2)))
THEN 1 ELSE 0 END AS max_a,b
FROM (SELECT MAX(a) as max_a,b FROM t1 GROUP BY t1.b) AS tab2
) AS tab1
WHERE (tab1.max_a=1);
max_a b 13 14
EXPLAIN FORMAT=JSON SELECT *
FROM
(
SELECT CASE WHEN ((tab2.max_a>1) AND ((tab2.max_a=2) OR (tab2.max_a>2)))
THEN 1 ELSE 0 END AS max_a,b
FROM (SELECT MAX(a) as max_a,b FROM t1 GROUP BY t1.b) AS tab2
) AS tab1
WHERE (tab1.max_a=1);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "case when tab2.max_a > 1 and (tab2.max_a = 2 or tab2.max_a > 2) then 1 else 0 end = 1", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "having_condition": "case when max_a > 1 and (max_a = 2 or max_a > 2) then 1 else 0 end = 1", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
}
}
}
]
}
}
SELECT *
FROM
(
SELECT CASE WHEN ((tab2.b=2) OR (tab2.b=4))
THEN 1 ELSE 0 END AS max_a,b
FROM (SELECT MAX(a) as max_a,b FROM t1 GROUP BY t1.b) AS tab2
) AS tab1
WHERE (tab1.max_a=1);
max_a b 12 14
EXPLAIN FORMAT=JSON SELECT *
FROM
(
SELECT CASE WHEN ((tab2.b=2) OR (tab2.b=4))
THEN 1 ELSE 0 END AS max_a,b
FROM (SELECT MAX(a) as max_a,b FROM t1 GROUP BY t1.b) AS tab2
) AS tab1
WHERE (tab1.max_a=1);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived3>", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "case when tab2.b = 2 or tab2.b = 4 then 1 else 0 end = 1", "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "case when t1.b = 2 or t1.b = 4 then 1 else 0 end = 1"
}
}
]
}
}
}
}
}
}
]
}
}
DROP TABLE t1;
#
# MDEV-16803: pushdown condition with IN predicate in the derived table
# defined with several SELECT statements
#
CREATE TABLE t1 (a INT, b INT);
INSERT INTO t1 VALUES (1,2),(3,2),(1,1);
SELECT * FROM
(
SELECT a,b,1 as c
FROM t1
UNION ALL
SELECT a,b,2 as c
FROM t1
) AS tab
WHERE ((a,b) IN ((1,2),(3,2)));
a b c 121 321 122 322
DROP TABLE t1;
#
# MDEV-17354: INSERT SELECT with condition pushdown into derived
#
CREATE TABLE t1 (f INT NOT NULL);
INSERT INTO t1 VALUES (3), (7), (3);
CREATE ALGORITHM= TEMPTABLE VIEW v1 AS SELECT * FROM ( SELECT * FROM t1 ) AS sq;
INSERT INTO t1
SELECT * FROM ( SELECT t1.f FROM v1 JOIN t1 ) AS t WHERE f IS NOT NULL;
EXPLAIN INSERT INTO t1
SELECT * FROM ( SELECT t1.f FROM v1 JOIN t1 ) AS t WHERE f IS NOT NULL;
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived4> ALL NULL NULL NULL NULL 12 Using temporary 1 PRIMARY t1 ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join) 4 DERIVED t1 ALL NULL NULL NULL NULL 12
EXPLAIN FORMAT=JSON INSERT INTO t1
SELECT * FROM ( SELECT t1.f FROM v1 JOIN t1 ) AS t WHERE f IS NOT NULL;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "<derived4>", "access_type": "ALL", "loops": 1, "rows": 12, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 12, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
}
},
{ "block-nl-join": { "table": { "table_name": "t1", "access_type": "ALL", "loops": 12, "rows": 12, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.f is not null"
}, "buffer_type": "flat", "buffer_size": "64", "join_type": "BNL"
}
}
]
}
}
}
SELECT * FROM t1;
f 3 7 3 3 3 3 7 7 7 3 3 3
DELETE FROM t1;
INSERT INTO t1 VALUES (3), (7), (3);
INSERT INTO t1
SELECT * FROM ( SELECT t1.f FROM v1 JOIN t1 ON v1.f=t1.f) AS t
WHERE f IS NOT NULL;
EXPLAIN FORMAT=JSON INSERT INTO t1
SELECT * FROM ( SELECT t1.f FROM v1 JOIN t1 ON v1.f=t1.f) AS t
WHERE f IS NOT NULL;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 8, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.f is not null"
}
},
{ "table": { "table_name": "<derived4>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "4", "used_key_parts": ["f"], "ref": ["test.t1.f"], "loops": 8, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 4, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 8, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.f is not null"
}
}
]
}
}
}
}
]
}
}
}
SELECT * FROM t1;
f 3 7 3 3 3 7 3 3
DROP VIEW v1;
DROP TABLE t1;
#
# MDEV-17574: pushdown into derived from mergeable view
# used in multi-table UPDATE
# pushdown into materialized derived from mergeable view
# used in SELECT
#
CREATE TABLE t1 (f1 text, f2 int);
INSERT INTO t1 VALUES ('x',1), ('y',2);
CREATE VIEW v1 AS SELECT f2 FROM ( SELECT f2 FROM t1 GROUP BY f2) AS t;
UPDATE v1, t1 SET t1.f1 = 'z' WHERE v1.f2 < 2AND t1.f2 = v1.f2;
EXPLAIN FORMAT=JSON UPDATE v1, t1 SET t1.f1 = 'z' WHERE v1.f2 < 2AND t1.f2 = v1.f2;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.f2 < 2 and t1.f2 is not null"
}
},
{ "table": { "table_name": "<derived3>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["f2"], "ref": ["test.t1.f2"], "loops": 2, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "filesort": { "sort_key": "t1.f2", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.f2 < 2"
}
}
]
}
}
}
}
}
}
]
}
}
SELECT * FROM t1;
f1 f2
z 1
y 2
CREATE VIEW v2 AS SELECT f2 FROM ( SELECT DISTINCT f2 FROM t1 ) AS t;
SELECT * FROM v2, t1 WHERE v2.f2 < 2AND t1.f2 = v2.f2;
f2 f1 f2 1 z 1
EXPLAIN FORMAT=JSON SELECT * FROM v2, t1 WHERE v2.f2 < 2AND t1.f2 = v2.f2;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.f2 < 2 and t1.f2 is not null"
}
},
{ "table": { "table_name": "<derived3>", "access_type": "ref", "possible_keys": ["key0"], "key": "key0", "key_length": "5", "used_key_parts": ["f2"], "ref": ["test.t1.f2"], "loops": 2, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "select_id": 3, "cost": "COST_REPLACED", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.f2 < 2"
}
}
]
}
}
}
}
}
]
}
}
DROP VIEW v1,v2;
DROP TABLE t1;
#
# MDEV-18383: pushdown condition with the IF structure
# defined with Item_cond item
#
CREATE TABLE t1(a INT, b INT);
CREATE TABLE t2(c INT, d INT);
INSERT INTO t1 VALUES (1,2),(3,4),(5,6);
INSERT INTO t2 VALUES (1,3),(3,7),(5,1);
SELECT *
FROM t1,
(
SELECT MAX(d) AS max_d,c
FROM t2
GROUP BY c
) AS tab
WHERE t1.a=tab.c AND IF(2,t1.a=1OR t1.b>5,1=1);
a b max_d c 1231 5615
DROP TABLE t1,t2;
#
# MDEV-19139: pushdown condition with Item_func_set_user_var
#
CREATE TABLE t1 (a INT, b INT);
CREATE VIEW v1 AS SELECT a, MAX(b) FROM t1 GROUP BY a;
SELECT * FROM (SELECT 1 FROM v1 UNION (SELECT 1 FROM v1 WHERE @a := uuid())) dt; 1
EXPLAIN FORMAT=JSON
SELECT * FROM (SELECT 1 FROM v1 UNION (SELECT 1 FROM v1 WHERE @a := uuid())) dt;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "union_result": { "table_name": "<union2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "table": { "message": "no matching row in const table"
}
}
},
{ "query_block": { "select_id": 3, "operation": "UNION", "table": { "message": "no matching row in const table"
}
}
}
]
}
}
}
}
}
]
}
}
DROP TABLE t1;
DROP VIEW v1;
#
# MDEV-21388 Wrong result of DAYNAME()=xxx in combination with condition_pushdown_for_derived=on
#
CREATE TABLE t1 (a INT, b DATE, c INT);
INSERT INTO t1 VALUES
(1,'2001-01-21',345),
(6,'2001-01-20',315),
(6,'2001-01-20',214);
CREATE TABLE t2 (a INT, b INT);
INSERT INTO t2 VALUES (2,19), (7,20);
CREATE VIEW v1 AS SELECT a, b, max(c) AS max_c FROM t1
GROUP BY a,b HAVING max_c < 707;
SELECT *, dayname(v1.b) FROM v1,t2 WHERE (v1.max_c>214) AND (t2.a>v1.a);
a b max_c a b dayname(v1.b) 12001-01-21345219 Sunday 12001-01-21345720 Sunday 62001-01-20315720 Saturday SET optimizer_switch='condition_pushdown_for_derived=off';
SELECT *, dayname(v1.b) FROM v1,t2 WHERE (v1.max_c>214) AND (t2.a>v1.a) AND dayname(v1.b)='Sunday';
a b max_c a b dayname(v1.b) 12001-01-21345219 Sunday 12001-01-21345720 Sunday SET optimizer_switch='condition_pushdown_for_derived=on';
SELECT *, dayname(v1.b) FROM v1,t2 WHERE (v1.max_c>214) AND (t2.a>v1.a) AND dayname(v1.b)='Sunday';
a b max_c a b dayname(v1.b) 12001-01-21345219 Sunday 12001-01-21345720 Sunday
DROP VIEW v1;
DROP TABLE t1, t2; SET optimizer_switch=DEFAULT;
#
# MDEV-17177: an attempt to push down IN predicate when one of
# the arguments is too complex to be cloned
#
CREATE TABLE t1 (a VARCHAR(8));
INSERT INTO t1 VALUES ('abc'),('def');
CREATE VIEW v1 AS SELECT * FROM t1 GROUP BY a;
SELECT * FROM v1 WHERE IF( a REGEXP 'def', 'foo', a ) IN ('abc', 'foobar');
a
abc
DROP VIEW v1;
DROP TABLE t1;
#
# MDEV-19179: pushdown into UNION of aggregation selects whose
# corresponding columns have different names
#
create table t1 (a int);
insert into t1 values (3), (7), (1);
select *
from (select min(a) as x from t1 union all select max(a) as y from t1) t
where x>0;
x 1 7
explain extended select *
from (select min(a) as x from t1 union all select max(a) as y from t1) t
where x>0;
id select_type table type possible_keys key key_len ref rows filtered Extra 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 6100.00 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 3100.00 3 UNION t1 ALL NULL NULL NULL NULL 3100.00
Warnings:
Note 1003/* select#1 */ select `t`.`x` AS `x` from (/* select#2 */ select min(`test`.`t1`.`a`) AS `x` from `test`.`t1` having `x` > 0 union all /* select#3 */ select max(`test`.`t1`.`a`) AS `x` from `test`.`t1` having `x` > 0) `t` where `t`.`x` > 0
prepare stmt from "select *
from (select min(a) as x from t1 union all select max(a) as y from t1) t
where x>0";
execute stmt;
x 1 7
execute stmt;
x 1 7
deallocate prepare stmt;
create view v1(m) as
select min(a) as x from t1 union all select max(a) as y from t1;
select * from v1 where m > 0;
m 1 7
drop view v1;
drop table t1;
#
# MDEV-25635: pushdown into grouping view using aggregate functions
# with constant arguments via a mergeable derived table
#
create table t1 (a int);
insert into t1 values (3), (7), (1), (3), (7), (7), (3);
create view v1 as select a, sum(1) as f, sum(1) as g from t1 group by a;
select * from v1;
a f g 111 333 733
select * from (select * from v1) as dt where a=f and a=g;
a f g 111 333
explain extended select * from (select * from v1) as dt where a=f and a=g;
id select_type table type possible_keys key key_len ref rows filtered Extra 1 PRIMARY <derived3> ALL NULL NULL NULL NULL 7100.00 Using where 3 DERIVED t1 ALL NULL NULL NULL NULL 7100.00 Using temporary; Using filesort
Warnings:
Note 1003/* select#1 */ select `v1`.`a` AS `a`,`v1`.`f` AS `f`,`v1`.`g` AS `g` from `test`.`v1` where `v1`.`a` = `v1`.`f` and `v1`.`a` = `v1`.`g`
create view v2 as select a, min(1) as f, min(1) as g from t1 group by a;
select * from v2;
a f g 111 311 711
select * from (select * from v2) as dt where a=f and a=g;
a f g 111
explain extended select * from (select * from v2) as dt where a=f and a=g;
id select_type table type possible_keys key key_len ref rows filtered Extra 1 PRIMARY <derived3> ALL NULL NULL NULL NULL 7100.00 Using where 3 DERIVED t1 ALL NULL NULL NULL NULL 7100.00 Using temporary; Using filesort
Warnings:
Note 1003/* select#1 */ select `v2`.`a` AS `a`,`v2`.`f` AS `f`,`v2`.`g` AS `g` from `test`.`v2` where `v2`.`a` = `v2`.`f` and `v2`.`a` = `v2`.`g`
drop view v1,v2;
drop table t1;
#
# MDEV-25969: Condition pushdown into derived table doesn't work if select list uses SP
#
create function f1(a int) returns int DETERMINISTIC return (a+1);
create table t1 (
pk int primary key,
a int,
b int,
key(a)
);
create table t2(a int);
insert into t2 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
create table t3(a int);
insert into t3 select A.a + B.a* 10 + C.a * 100 from t2 A, t2 B, t2 C;
insert into t1 select a,a,a from t3;
create view v1 as
select
t1.a as col1,
f1(t1.b) as col2
from
t1;
create view v2 as
select
t1.a as col1,
f1(t1.b) as col2
from
t1;
create view v3 as
select col2, col1 from v1
union all
select col2, col1 from v2;
explain select * from v3 where col1=123;
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 2 Using where 2 DERIVED t1 ref a a 5 const 1 3 UNION t1 ref a a 5 const 1
# This must use ref accesses for reading table t1, not full scans:
explain format=json
select * from v3 where col1=123and col2=321;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 2, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v3.col1 = 123 and v3.col2 = 321", "materialized": { "query_block": { "union_result": { "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ref", "possible_keys": ["a"], "key": "a", "key_length": "5", "used_key_parts": ["a"], "ref": ["const"], "loops": 1, "rows": 1, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
},
{ "query_block": { "select_id": 3, "operation": "UNION", "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ref", "possible_keys": ["a"], "key": "a", "key_length": "5", "used_key_parts": ["a"], "ref": ["const"], "loops": 1, "rows": 1, "cost": "COST_REPLACED", "filtered": 100
}
}
]
}
}
]
}
}
}
}
}
]
}
}
drop function f1;
drop view v1,v2,v3;
drop table t1, t2,t3;
#
# Another testcase, with pushdown through GROUP BY
#
create table t1 (a int, b int);
insert into t1 values (1,1),(2,2),(3,3);
create function f1(a int) returns int DETERMINISTIC return (a+1);
create view v2(a, a2, s) as
select a, f1(a), sum(b) from t1 group by a, f1(a);
# Here,
# "(s+1) > 10" will be pushed into HAVING
# "a > 1" will be pushed all the way to the table scan on t1
# "a2>123" will be pushed into HAVING (as it refers to an SP call which
# prevents pushing it to the WHERE)
explain format=json
select * from v2 where (s+1) > 10AND a > 1and a2>123;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v2.s + 1 > 10 and v2.a > 1 and v2.a2 > 123", "materialized": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "s + 1 > 10 and a2 > 123", "filesort": { "sort_key": "t1.a, f1(t1.a)", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 1"
}
}
]
}
}
}
}
}
}
]
}
}
# Extra test for 10.4+: Check that this works for pushdown into IN
# subqueries:
create table t4 (a int, b int, c decimal);
insert into t4 select a,a,a from t1;
# The subquery must be materialized and must have
# "attached_condition": "t1.a + 1 > 10",
# "having_condition": "`f1(a)` > 1 and `sum(b)` > 123",
explain format=json
select *
from t4
where
(a,b,c) in (select a, f1(a), sum(b) from t1 group by a, f1(a)) and
(a+1) > 10AND b > 1and c>123;
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t4", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t4.a + 1 > 10 and t4.b > 1 and t4.c > 123 and t4.a is not null and t4.b is not null and t4.c is not null"
}
},
{ "table": { "table_name": "<subquery2>", "access_type": "eq_ref", "possible_keys": ["distinct_key"], "key": "distinct_key", "key_length": "23", "used_key_parts": ["a", "f1(a)", "sum(b)"], "ref": ["test.t4.a", "test.t4.b", "test.t4.c"], "loops": 3, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t4.c = `<subquery2>`.`sum(b)`", "materialized": { "unique": 1, "materialization": { "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "`f1(a)` > 1 and `sum(b)` > 123", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a + 1 > 10"
}
}
]
}
}
}
}
}
}
]
}
}
drop view v2;
drop function f1;
drop table t1, t4;
# End of 10.2 tests
#
# MDEV-14579: pushdown conditions into materialized views/derived tables
# that are defined with EXIST or/and INTERSECT
#
create table t1 (a int, b int, c int);
create table t2 (a int, b int, c int);
insert into t1 values
(1,21,345), (1,33,7), (8,33,114), (1,21,500), (1,19,117), (5,14,787),
(8,33,123), (9,10,211), (5,16,207), (1,33,988), (5,27,132), (1,21,104),
(6,20,309), (6,20,315), (1,21,101), (4,33,404), (9,10,800), (1,21,123);
insert into t2 values
(2,3,207), (1,16,909), (5,14,312),
(5,33,207), (6,20,211), (1,19,132),
(8,33,117), (3,21,231), (6,23,303);
create view v1 as
select a, b, min(c) as c from t1
where t1.a<9 group by a,b having c < 300
intersect
select a, b, min(c) as c from t1
where t1.b>10 group by a,b having c > 100;
# using intersect in view definition
# conjunctive subformulas : pushing into WHERE set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=t2.a) and (v1.a<5);
a b c a b c 121101116909 119117116909 121101119132 119117119132
select * from v1,t2 where (v1.a=t2.a) and (v1.a<5);
a b c a b c 121101116909 119117116909 121101119132 119117119132
explain select * from v1,t2 where (v1.a=t2.a) and (v1.a<5);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.a 1 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 INTERSECT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL INTERSECT RESULT <intersect2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where (v1.a=t2.a) and (v1.a<5);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a < 5 and t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "union_result": { "table_name": "<intersect2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c < 300", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 9 and t1.a < 5"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "INTERSECT", "cost": "COST_REPLACED", "having_condition": "c > 100", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and t1.a < 5"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using intersect in view definition
# conjunctive subformulas : pushing into WHERE
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=t2.a) and (v1.a=8);
a b c a b c 833114833117
select * from v1,t2 where (v1.a=t2.a) and (v1.a=8);
a b c a b c 833114833117
explain select * from v1,t2 where (v1.a=t2.a) and (v1.a=8);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ALL distinct_key NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 INTERSECT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL INTERSECT RESULT <intersect2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where (v1.a=t2.a) and (v1.a=8);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a = 8"
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "possible_keys": ["distinct_key"], "loops": 9, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a = 8"
}, "buffer_type": "flat", "buffer_size": "173", "join_type": "BNL", "materialized": { "query_block": { "union_result": { "table_name": "<intersect2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c < 300", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 8"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "INTERSECT", "cost": "COST_REPLACED", "having_condition": "c > 100", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 8 and t1.b > 10"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using intersect in view definition
# conjunctive subformulas : pushing into WHERE using equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=t2.a) and (t2.a=8);
a b c a b c 833114833117
select * from v1,t2 where (v1.a=t2.a) and (t2.a=8);
a b c a b c 833114833117
explain select * from v1,t2 where (v1.a=t2.a) and (t2.a=8);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ALL distinct_key NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 INTERSECT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL INTERSECT RESULT <intersect2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where (v1.a=t2.a) and (t2.a=8);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a = 8"
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "possible_keys": ["distinct_key"], "loops": 9, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a = 8"
}, "buffer_type": "flat", "buffer_size": "173", "join_type": "BNL", "materialized": { "query_block": { "union_result": { "table_name": "<intersect2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c < 300", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 8"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "INTERSECT", "cost": "COST_REPLACED", "having_condition": "c > 100", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 8 and t1.b > 10"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using intersect in view definition
# conjunctive subformulas : pushing into HAVING set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=t2.a) and (v1.c>200);
a b c a b c 516207514312 516207533207
select * from v1,t2 where (v1.a=t2.a) and (v1.c>200);
a b c a b c 516207514312 516207533207
explain select * from v1,t2 where (v1.a=t2.a) and (v1.c>200);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.a 1 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 INTERSECT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL INTERSECT RESULT <intersect2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where (v1.a=t2.a) and (v1.c>200);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.c > 200", "materialized": { "query_block": { "union_result": { "table_name": "<intersect2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c < 300 and c > 200", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 9"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "INTERSECT", "cost": "COST_REPLACED", "having_condition": "c > 100 and c > 200", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using intersect in view definition
# conjunctive subformulas : pushing into WHERE
# conjunctive subformulas : pushing into HAVING set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=t2.a) and (v1.a<5) and (v1.c>110);
a b c a b c 119117116909 119117119132
select * from v1,t2 where (v1.a=t2.a) and (v1.a<5) and (v1.c>110);
a b c a b c 119117116909 119117119132
explain select * from v1,t2 where (v1.a=t2.a) and (v1.a<5) and (v1.c>110);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.a 1 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 INTERSECT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL INTERSECT RESULT <intersect2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where (v1.a=t2.a) and (v1.a<5) and (v1.c>110);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a < 5 and t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.c > 110", "materialized": { "query_block": { "union_result": { "table_name": "<intersect2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c < 300 and c > 110", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 9 and t1.a < 5"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "INTERSECT", "cost": "COST_REPLACED", "having_condition": "c > 100 and c > 110", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and t1.a < 5"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using intersect in view definition
# extracted or formula : pushing into WHERE set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=t2.a) and ((v1.b>27) or (v1.b<19));
a b c a b c 516207514312 516207533207 833114833117
select * from v1,t2 where (v1.a=t2.a) and ((v1.b>27) or (v1.b<19));
a b c a b c 516207514312 516207533207 833114833117
explain select * from v1,t2 where (v1.a=t2.a) and ((v1.b>27) or (v1.b<19));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.a 1 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 INTERSECT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL INTERSECT RESULT <intersect2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where (v1.a=t2.a) and ((v1.b>27) or (v1.b<19));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.b > 27 or v1.b < 19", "materialized": { "query_block": { "union_result": { "table_name": "<intersect2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c < 300", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 9 and (t1.b > 27 or t1.b < 19)"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "INTERSECT", "cost": "COST_REPLACED", "having_condition": "c > 100", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and (t1.b > 27 or t1.b < 19)"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using intersect in view definition
# extracted or formula : pushing into HAVING set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where
(v1.a=t2.a) and ((v1.c>200) or (v1.c<105));
a b c a b c 121101116909 516207514312 516207533207 121101119132
select * from v1,t2 where
(v1.a=t2.a) and ((v1.c>200) or (v1.c<105));
a b c a b c 121101116909 516207514312 516207533207 121101119132
explain select * from v1,t2 where
(v1.a=t2.a) and ((v1.c>200) or (v1.c<105));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.a 1 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 INTERSECT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL INTERSECT RESULT <intersect2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where
(v1.a=t2.a) and ((v1.c>200) or (v1.c<105));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.c > 200 or v1.c < 105", "materialized": { "query_block": { "union_result": { "table_name": "<intersect2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c < 300 and (c > 200 or c < 105)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 9"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "INTERSECT", "cost": "COST_REPLACED", "having_condition": "c > 100 and (c > 200 or c < 105)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using intersect in view definition
# extracted or formula : pushing into WHERE
# extracted or formula : pushing into HAVING using equalities
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where
((v1.a>3) and (t2.c>110) and (v1.c=t2.c)) or
((v1.a=1) and (v1.c<110));
a b c a b c 12110123207 121101116909 121101514312 121101533207 121101620211 121101119132 121101833117 121101321231 121101623303 51620723207 516207533207 527132119132
select * from v1,t2 where
((v1.a>3) and (t2.c>110) and (v1.c=t2.c)) or
((v1.a=1) and (v1.c<110));
a b c a b c 12110123207 121101116909 121101514312 121101533207 121101620211 121101119132 121101833117 121101321231 121101623303 51620723207 516207533207 527132119132
explain select * from v1,t2 where
((v1.a>3) and (t2.c>110) and (v1.c=t2.c)) or
((v1.a=1) and (v1.c<110));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 INTERSECT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL INTERSECT RESULT <intersect2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where
((v1.a>3) and (t2.c>110) and (v1.c=t2.c)) or
((v1.a=1) and (v1.c<110));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a > 3 or v1.a = 1 and v1.c < 110"
}, "buffer_type": "flat", "buffer_size": "173", "join_type": "BNL", "attached_condition": "v1.c = t2.c and v1.a > 3 and t2.c > 110 or v1.a = 1 and v1.c < 110", "materialized": { "query_block": { "union_result": { "table_name": "<intersect2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c < 300 and (t1.a > 3 and c > 110 or t1.a = 1 and c < 110)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 9 and (t1.a > 3 or t1.a = 1)"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "INTERSECT", "cost": "COST_REPLACED", "having_condition": "c > 100 and (t1.a > 3 and c > 110 or t1.a = 1 and c < 110)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and (t1.a > 3 or t1.a = 1)"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using intersect in view definition
# prepare of a query
# conjunctive subformulas : pushing into WHERE
# conjunctive subformulas : pushing into HAVING
prepare stmt from "select * from v1,t2
where (v1.a=t2.a) and (v1.a<5) and (v1.c>110);";
execute stmt;
a b c a b c 119117116909 119117119132
execute stmt;
a b c a b c 119117116909 119117119132
deallocate prepare stmt;
# using intersect in derived table definition
# extracted or formula : pushing into WHERE using equalities
# extracted or formula : pushing into HAVING
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select *
from t2,
(select a, b, min(c) as c from t1
where t1.a<9 group by a,b having c < 300
intersect
select a, b, min(c) as c from t1
where t1.b>10 group by a,b having c > 100) as d1
where
(d1.b=t2.b) and
(((t2.b>13) and (t2.c=909)) or
((d1.a<4) and (d1.c<200)));
a b c a b c 116909516207 119132119117 321231121101
select *
from t2,
(select a, b, min(c) as c from t1
where t1.a<9 group by a,b having c < 300
intersect
select a, b, min(c) as c from t1
where t1.b>10 group by a,b having c > 100) as d1
where
(d1.b=t2.b) and
(((t2.b>13) and (t2.c=909)) or
((d1.a<4) and (d1.c<200)));
a b c a b c 116909516207 119132119117 321231121101
explain select *
from t2,
(select a, b, min(c) as c from t1
where t1.a<9 group by a,b having c < 300
intersect
select a, b, min(c) as c from t1
where t1.b>10 group by a,b having c > 100) as d1
where
(d1.b=t2.b) and
(((t2.b>13) and (t2.c=909)) or
((d1.a<4) and (d1.c<200)));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.b 1 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 INTERSECT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL INTERSECT RESULT <intersect2,3> ALL NULL NULL NULL NULL NULL
explain format=json select *
from t2,
(select a, b, min(c) as c from t1
where t1.a<9 group by a,b having c < 300
intersect
select a, b, min(c) as c from t1
where t1.b>10 group by a,b having c > 100) as d1
where
(d1.b=t2.b) and
(((t2.b>13) and (t2.c=909)) or
((d1.a<4) and (d1.c<200)));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.b is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["b"], "ref": ["test.t2.b"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.c = 909 and t2.b > 13 or d1.a < 4 and d1.c < 200", "materialized": { "query_block": { "union_result": { "table_name": "<intersect2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c < 300 and (t1.b > 13 or t1.a < 4 and c < 200)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 9 and (t1.b > 13 or t1.a < 4)"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "INTERSECT", "cost": "COST_REPLACED", "having_condition": "c > 100 and (t1.b > 13 or t1.a < 4 and c < 200)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and (t1.b > 13 or t1.a < 4)"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
drop view v1;
create view v1 as
select a, b, max(c) as c from t1
where t1.a<9 group by a,b having c > 200
except
select a, b, max(c) as c from t1
where t1.b>10 group by a,b having c < 300;
# using except in view definition
# conjunctive subformulas : pushing into WHERE set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=t2.a) and (v1.a<5);
a b c a b c 133988116909 121500116909 133988119132 121500119132
select * from v1,t2 where (v1.a=t2.a) and (v1.a<5);
a b c a b c 133988116909 121500116909 133988119132 121500119132
explain select * from v1,t2 where (v1.a=t2.a) and (v1.a<5);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.a 1 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 EXCEPT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL EXCEPT RESULT <except2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where (v1.a=t2.a) and (v1.a<5);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a < 5 and t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "materialized": { "query_block": { "union_result": { "table_name": "<except2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c > 200", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 9 and t1.a < 5"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "EXCEPT", "cost": "COST_REPLACED", "having_condition": "c < 300", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and t1.a < 5"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using except in view definition
# conjunctive subformulas : pushing into WHERE
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=t2.a) and (v1.a=6);
a b c a b c 620315620211 620315623303
select * from v1,t2 where (v1.a=t2.a) and (v1.a=6);
a b c a b c 620315620211 620315623303
explain select * from v1,t2 where (v1.a=t2.a) and (v1.a=6);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ALL distinct_key NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 EXCEPT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL EXCEPT RESULT <except2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where (v1.a=t2.a) and (v1.a=6);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a = 6"
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "possible_keys": ["distinct_key"], "loops": 9, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a = 6"
}, "buffer_type": "flat", "buffer_size": "173", "join_type": "BNL", "materialized": { "query_block": { "union_result": { "table_name": "<except2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c > 200", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 6"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "EXCEPT", "cost": "COST_REPLACED", "having_condition": "c < 300", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 6 and t1.b > 10"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using except in view definition
# conjunctive subformulas : pushing into WHERE using equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=t2.a) and (t2.a=6);
a b c a b c 620315620211 620315623303
select * from v1,t2 where (v1.a=t2.a) and (t2.a=6);
a b c a b c 620315620211 620315623303
explain select * from v1,t2 where (v1.a=t2.a) and (t2.a=6);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ALL distinct_key NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 EXCEPT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL EXCEPT RESULT <except2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where (v1.a=t2.a) and (t2.a=6);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a = 6"
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "possible_keys": ["distinct_key"], "loops": 9, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a = 6"
}, "buffer_type": "flat", "buffer_size": "173", "join_type": "BNL", "materialized": { "query_block": { "union_result": { "table_name": "<except2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c > 200", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 6"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "EXCEPT", "cost": "COST_REPLACED", "having_condition": "c < 300", "filesort": { "sort_key": "t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a = 6 and t1.b > 10"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using except in view definition
# conjunctive subformulas : pushing into HAVING set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=t2.a) and (v1.c>500);
a b c a b c 133988116909 514787514312 514787533207 133988119132
select * from v1,t2 where (v1.a=t2.a) and (v1.c>500);
a b c a b c 133988116909 514787514312 514787533207 133988119132
explain select * from v1,t2 where (v1.a=t2.a) and (v1.c>500);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.a 1 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 EXCEPT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL EXCEPT RESULT <except2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where (v1.a=t2.a) and (v1.c>500);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.c > 500", "materialized": { "query_block": { "union_result": { "table_name": "<except2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c > 200 and c > 500", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 9"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "EXCEPT", "cost": "COST_REPLACED", "having_condition": "c < 300 and c > 500", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using except in view definition
# conjunctive subformulas : pushing into WHERE
# conjunctive subformulas : pushing into HAVING set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=t2.a) and (v1.a<5) and (v1.c>500);
a b c a b c 133988116909 133988119132
select * from v1,t2 where (v1.a=t2.a) and (v1.a<5) and (v1.c>500);
a b c a b c 133988116909 133988119132
explain select * from v1,t2 where (v1.a=t2.a) and (v1.a<5) and (v1.c>500);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.a 1 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 EXCEPT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL EXCEPT RESULT <except2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where (v1.a=t2.a) and (v1.a<5) and (v1.c>500);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a < 5 and t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.c > 500", "materialized": { "query_block": { "union_result": { "table_name": "<except2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c > 200 and c > 500", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 9 and t1.a < 5"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "EXCEPT", "cost": "COST_REPLACED", "having_condition": "c < 300 and c > 500", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and t1.a < 5"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using except in view definition
# extracted or formula : pushing into WHERE set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=t2.a) and ((v1.b>27) or (v1.b<19));
a b c a b c 133988116909 514787514312 514787533207 133988119132
select * from v1,t2 where (v1.a=t2.a) and ((v1.b>27) or (v1.b<19));
a b c a b c 133988116909 514787514312 514787533207 133988119132
explain select * from v1,t2 where (v1.a=t2.a) and ((v1.b>27) or (v1.b<19));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.a 1 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 EXCEPT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL EXCEPT RESULT <except2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where (v1.a=t2.a) and ((v1.b>27) or (v1.b<19));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.b > 27 or v1.b < 19", "materialized": { "query_block": { "union_result": { "table_name": "<except2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c > 200", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 9 and (t1.b > 27 or t1.b < 19)"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "EXCEPT", "cost": "COST_REPLACED", "having_condition": "c < 300", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and (t1.b > 27 or t1.b < 19)"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using except in view definition
# extracted or formula : pushing into HAVING set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where
(v1.a=t2.a) and ((v1.c<400) or (v1.c>800));
a b c a b c 133988116909 620315620211 133988119132 620315623303
select * from v1,t2 where
(v1.a=t2.a) and ((v1.c<400) or (v1.c>800));
a b c a b c 133988116909 620315620211 133988119132 620315623303
explain select * from v1,t2 where
(v1.a=t2.a) and ((v1.c<400) or (v1.c>800));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.a 1 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 EXCEPT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL EXCEPT RESULT <except2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where
(v1.a=t2.a) and ((v1.c<400) or (v1.c>800));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.c < 400 or v1.c > 800", "materialized": { "query_block": { "union_result": { "table_name": "<except2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c > 200 and (c < 400 or c > 800)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 9"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "EXCEPT", "cost": "COST_REPLACED", "having_condition": "c < 300 and (c < 400 or c > 800)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using except in view definition
# extracted or formula : pushing into WHERE
# extracted or formula : pushing into HAVING using equalities
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where
(v1.c=t2.c) and
((v1.a>1) and (t2.c<500)) or
((v1.a=1) and (v1.c>500));
a b c a b c 13398823207 133988116909 133988514312 133988533207 133988620211 133988119132 133988833117 133988321231 133988623303
select * from v1,t2 where
(v1.c=t2.c) and
((v1.a>1) and (t2.c<500)) or
((v1.a=1) and (v1.c>500));
a b c a b c 13398823207 133988116909 133988514312 133988533207 133988620211 133988119132 133988833117 133988321231 133988623303
explain select * from v1,t2 where
(v1.c=t2.c) and
((v1.a>1) and (t2.c<500)) or
((v1.a=1) and (v1.c>500));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join) 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 EXCEPT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL EXCEPT RESULT <except2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where
(v1.c=t2.c) and
((v1.a>1) and (t2.c<500)) or
((v1.a=1) and (v1.c>500));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100
}
},
{ "block-nl-join": { "table": { "table_name": "<derived2>", "access_type": "ALL", "loops": 9, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.a > 1 or v1.a = 1 and v1.c > 500"
}, "buffer_type": "flat", "buffer_size": "173", "join_type": "BNL", "attached_condition": "v1.c = t2.c and v1.a > 1 and t2.c < 500 or v1.a = 1 and v1.c > 500", "materialized": { "query_block": { "union_result": { "table_name": "<except2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c > 200 and (t1.a > 1 and c < 500 or t1.a = 1 and c > 500)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 9 and (t1.a > 1 or t1.a = 1)"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "EXCEPT", "cost": "COST_REPLACED", "having_condition": "c < 300 and (t1.a > 1 and c < 500 or t1.a = 1 and c > 500)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and (t1.a > 1 or t1.a = 1)"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
# using except in view definition
# prepare of a query
# conjunctive subformulas : pushing into WHERE
# conjunctive subformulas : pushing into HAVING
prepare stmt from "select * from v1,t2
where (v1.a=t2.a) and (v1.a<5) and (v1.c>500);";
execute stmt;
a b c a b c 133988116909 133988119132
execute stmt;
a b c a b c 133988116909 133988119132
deallocate prepare stmt;
# using except in view definition
# extracted or formula : pushing into WHERE using equalities
# extracted or formula : pushing into HAVING
# pushing equalities set statement optimizer_switch='condition_pushdown_for_derived=off' for select *
from t2,
(select a, b, max(c) as c from t1
where t1.a<9 group by a,b having c > 200
except
select a, b, max(c) as c from t1
where t1.b>10 group by a,b having c < 300) as d1
where
(d1.b=t2.b) and
(((t2.b>13) and (t2.c=988)) or
((d1.a>4) and (d1.c>500)));
a b c a b c 514312514787
select *
from t2,
(select a, b, max(c) as c from t1
where t1.a<9 group by a,b having c > 200
except
select a, b, max(c) as c from t1
where t1.b>10 group by a,b having c < 300) as d1
where
(d1.b=t2.b) and
(((t2.b>13) and (t2.c=988)) or
((d1.a>4) and (d1.c>500)));
a b c a b c 514312514787
explain select *
from t2,
(select a, b, max(c) as c from t1
where t1.a<9 group by a,b having c > 200
except
select a, b, max(c) as c from t1
where t1.b>10 group by a,b having c < 300) as d1
where
(d1.b=t2.b) and
(((t2.b>13) and (t2.c=988)) or
((d1.a>4) and (d1.c>500)));
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.b 1 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 EXCEPT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL EXCEPT RESULT <except2,3> ALL NULL NULL NULL NULL NULL
explain format=json select *
from t2,
(select a, b, max(c) as c from t1
where t1.a<9 group by a,b having c > 200
except
select a, b, max(c) as c from t1
where t1.b>10 group by a,b having c < 300) as d1
where
(d1.b=t2.b) and
(((t2.b>13) and (t2.c=988)) or
((d1.a>4) and (d1.c>500)));
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.b is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["b"], "ref": ["test.t2.b"], "loops": 9, "rows": 1, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.c = 988 and t2.b > 13 or d1.a > 4 and d1.c > 500", "materialized": { "query_block": { "union_result": { "table_name": "<except2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c > 200 and (t1.b > 13 or t1.a > 4 and c > 500)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 9 and (t1.b > 13 or t1.a > 4)"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "EXCEPT", "cost": "COST_REPLACED", "having_condition": "c < 300 and (t1.b > 13 or t1.a > 4 and c > 500)", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and (t1.b > 13 or t1.a > 4)"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
drop view v1;
# using union and intersect in view definition
# conjunctive subformulas : pushing into WHERE and HAVING
create view v1 as
select a, b, min(c) as c from t1
where t1.a<9 group by a,b having c > 200
union
select a, b, max(c) as c from t1
where t1.b>10 group by a,b having c < 300
intersect
select a, b, max(c) as c from t1
where t1.a>3 group by a,b having c < 530; set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=t2.a) and (v1.a>5) and (v1.c>200);
a b c a b c 620309620211 620309623303
select * from v1,t2 where (v1.a=t2.a) and (v1.a>5) and (v1.c>200);
a b c a b c 620309620211 620309623303
explain select * from v1,t2 where (v1.a=t2.a) and (v1.a>5) and (v1.c>200);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.a 3 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 UNION <derived4> ALL NULL NULL NULL NULL 18 Using where 4 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 5 INTERSECT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL INTERSECT RESULT <intersect4,5> ALL NULL NULL NULL NULL NULL
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where (v1.a=t2.a) and (v1.a>5) and (v1.c>200);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a > 5 and t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.c > 200", "materialized": { "query_block": { "union_result": { "table_name": "<union2,3>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c > 200 and c > 200", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 9 and t1.a > 5"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "UNION", "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "<derived4>", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "__5.a > 5 and __5.c > 200", "materialized": { "query_block": { "union_result": { "table_name": "<intersect4,5>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 4, "cost": "COST_REPLACED", "having_condition": "c < 300 and c > 200", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and t1.a > 5"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 5, "operation": "INTERSECT", "cost": "COST_REPLACED", "having_condition": "c < 530 and c > 200", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 3 and t1.a > 5"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
]
}
}
}
}
}
]
}
}
drop view v1;
# using union and intersect in view definition
# conjunctive subformulas : pushing into WHERE and HAVING
create view v1 as
select a, b, min(c) as c from t1
where t1.a<9 group by a,b having c > 200
intersect
select a, b, max(c) as c from t1
where t1.a>3 group by a,b having c < 500
union
select a, b, max(c) as c from t1
where t1.b>10 group by a,b having c < 300; set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=t2.a) and (v1.a>4) and (v1.c<200);
a b c a b c 527132514312 527132533207 833123833117
select * from v1,t2 where (v1.a=t2.a) and (v1.a>4) and (v1.c<200);
a b c a b c 527132514312 527132533207 833123833117
explain select * from v1,t2 where (v1.a=t2.a) and (v1.a>4) and (v1.c<200);
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 9 Using where 1 PRIMARY <derived2> ref key1,distinct_key key1 5 test.t2.a 3 Using where 2 DERIVED t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 3 INTERSECT t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort 4 UNION t1 ALL NULL NULL NULL NULL 18 Using where; Using temporary; Using filesort
NULL UNIT RESULT <unit2,3,4> ALL NULL NULL NULL NULL NULL
explain format=json select * from v1,t2 where (v1.a=t2.a) and (v1.a>4) and (v1.c<200);
EXPLAIN
{ "query_block": { "select_id": 1, "cost": "COST_REPLACED", "nested_loop": [
{ "table": { "table_name": "t2", "access_type": "ALL", "loops": 1, "rows": 9, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t2.a > 4 and t2.a is not null"
}
},
{ "table": { "table_name": "<derived2>", "access_type": "ref", "possible_keys": ["key1", "distinct_key"], "key": "key1", "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t2.a"], "loops": 9, "rows": 3, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "v1.c < 200", "materialized": { "query_block": { "union_result": { "table_name": "<unit2,3,4>", "access_type": "ALL", "query_specifications": [
{ "query_block": { "select_id": 2, "cost": "COST_REPLACED", "having_condition": "c > 200 and c < 200", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a < 9 and t1.a > 4"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 3, "operation": "INTERSECT", "cost": "COST_REPLACED", "having_condition": "c < 500 and c < 200", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.a > 3 and t1.a > 4"
}
}
]
}
}
}
},
{ "query_block": { "select_id": 4, "operation": "UNION", "cost": "COST_REPLACED", "having_condition": "c < 300 and c < 200", "filesort": { "sort_key": "t1.a, t1.b", "temporary_table": { "nested_loop": [
{ "table": { "table_name": "t1", "access_type": "ALL", "loops": 1, "rows": 18, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b > 10 and t1.a > 4"
}
}
]
}
}
}
}
]
}
}
}
}
}
]
}
}
drop view v1;
# using union and except in view definition
# conjunctive subformulas : pushing into WHERE and HAVING
create view v1 as
select a, b, min(c) as c from t1
where t1.a<9 group by a,b having c > 200
union
select a, b, max(c) as c from t1
where t1.b>10 group by a,b having c < 300
except
select a, b, max(c) as c from t1
where t1.a>3 group by a,b having c < 530; set statement optimizer_switch='condition_pushdown_for_derived=off' for select * from v1,t2 where (v1.a=t2.a) and (v1.a>5) and (v1.c>200);
a b c a b c 620309620211 620309623303
select * from v1,t2 where (v1.a=t2.a) and (v1.a>5) and (v1.c>200);
a b c a b c 620309620211 620309623303
--> --------------------
--> maximum size reached
--> --------------------
Messung V0.5 in Prozent
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen1.761Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-10-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.