mirror of
https://github.com/MariaDB/server.git
synced 2025-09-02 09:41:40 +03:00
Implementation of the last review comments for WL#1724
"Min/Max Optimization for Queries with Group By Clause"
This commit is contained in:
@@ -1869,6 +1869,12 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
explain select a1,a2,b from t1 where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') and (c > 'a111') group by a1,a2,b;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range idx_t1_0,idx_t1_1,idx_t1_2 idx_t1_1 130 NULL 76 Using where; Using index
|
||||
explain select a1,a2,min(b),c from t2 where (a2 = 'a') and (c = 'a111') group by a1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 index NULL idx_t2_1 163 NULL 164 Using where; Using index
|
||||
select a1,a2,min(b),c from t2 where (a2 = 'a') and (c = 'a111') group by a1;
|
||||
a1 a2 min(b) c
|
||||
a a a a111
|
||||
explain select a1,a2,b,max(c),min(c) from t2 where (a2 = 'a') and (b = 'b') or (b = 'a') group by a1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 index NULL idx_t2_1 163 NULL 164 Using where; Using index
|
||||
|
@@ -3,6 +3,12 @@
|
||||
# The queries in this file test query execution via QUICK_GROUP_MIN_MAX_SELECT.
|
||||
#
|
||||
|
||||
#
|
||||
# TODO:
|
||||
# Add queries with:
|
||||
# - C != const
|
||||
# - C IS NOT NULL
|
||||
# - HAVING clause
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
@@ -175,8 +181,6 @@ explain select a1, b, min(c), a1, max(c), b, a2, max(c), max(c) from t1 group by
|
||||
explain select min(a2) from t1 group by a1;
|
||||
explain select a2, min(c), max(c) from t1 group by a1,a2,b;
|
||||
|
||||
-- TODO: Queries with HAVING
|
||||
|
||||
-- queries
|
||||
select a1, min(a2) from t1 group by a1;
|
||||
select a1, max(a2) from t1 group by a1;
|
||||
@@ -190,8 +194,6 @@ select a1, b, min(c), a1, max(c), b, a2, max(c), max(c) from t1 group by a1, a2,
|
||||
select min(a2) from t1 group by a1;
|
||||
select a2, min(c), max(c) from t1 group by a1,a2,b;
|
||||
|
||||
-- TODO: Queries with HAVING
|
||||
|
||||
--
|
||||
-- Queries with a where clause
|
||||
--
|
||||
@@ -300,7 +302,6 @@ select a1,a2,b,min(c) from t2 where b is NULL group by a1,a2;
|
||||
select a1,a2,b,max(c) from t2 where b is NULL group by a1,a2;
|
||||
select a1,a2,b,min(c),max(c) from t2 where b is NULL group by a1,a2;
|
||||
select a1,a2,b,min(c),max(c) from t2 where b is NULL group by a1,a2;
|
||||
-- TODO: IS NOT NULL ?
|
||||
|
||||
-- C) Range predicates for the MIN/MAX attribute
|
||||
-- plans
|
||||
@@ -553,6 +554,11 @@ where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') and (d > 'xy
|
||||
explain select a1,a2,b,max(c),min(c) from t2 where (a2 = 'a') and (b = 'b') or (b < 'b') group by a1;
|
||||
explain select a1,a2,b from t1 where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') and (c > 'a111') group by a1,a2,b;
|
||||
|
||||
-- non-group field with an equality predicate that references a keypart after the
|
||||
-- MIN/MAX argument
|
||||
explain select a1,a2,min(b),c from t2 where (a2 = 'a') and (c = 'a111') group by a1;
|
||||
select a1,a2,min(b),c from t2 where (a2 = 'a') and (c = 'a111') group by a1;
|
||||
|
||||
-- disjunction for a non-group select attribute
|
||||
explain select a1,a2,b,max(c),min(c) from t2 where (a2 = 'a') and (b = 'b') or (b = 'a') group by a1;
|
||||
|
||||
|
Reference in New Issue
Block a user