📄 group_min_max.test
字号:
select distinct t_00.a1from t1 t_00where exists ( select * from t2 where a1 = t_00.a1 );-- BUG #8532 - SELECT DISTINCT a, a causes server to crashselect distinct a1,a1 from t1;select distinct a2,a1,a2,a1 from t1;select distinct t1.a1,t2.a1 from t1,t2;---- DISTINCT queries with GROUP-BY---- plansexplain select distinct a1,a2,b from t1;explain select distinct a1,a2,b from t1 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;explain select distinct a1,a2,b,c from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121') group by a1,a2,b;explain select distinct a1,a2,b from t1 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;explain select distinct b from t1 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;--replace_column 9 #explain select distinct a1,a2,b from t2;--replace_column 9 #explain select distinct a1,a2,b from t2 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;--replace_column 9 #explain select distinct a1,a2,b,c from t2 where (a2 >= 'b') and (b = 'a') and (c = 'i121') group by a1,a2,b;--replace_column 9 #explain select distinct a1,a2,b from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;--replace_column 9 #explain select distinct b from t2 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;-- queriesselect distinct a1,a2,b from t1;select distinct a1,a2,b from t1 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;select distinct a1,a2,b,c from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121') group by a1,a2,b;select distinct a1,a2,b from t1 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;select distinct b from t1 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;select distinct a1,a2,b from t2;select distinct a1,a2,b from t2 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;select distinct a1,a2,b,c from t2 where (a2 >= 'b') and (b = 'a') and (c = 'i121') group by a1,a2,b;select distinct a1,a2,b from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;select distinct b from t2 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;---- COUNT (DISTINCT cols) queries--explain select count(distinct a1,a2,b) from t1 where (a2 >= 'b') and (b = 'a');explain select count(distinct a1,a2,b,c) from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121');explain select count(distinct a1,a2,b) from t1 where (a1 > 'a') and (a2 > 'a') and (b = 'c');explain select count(distinct b) from t1 where (a2 >= 'b') and (b = 'a');explain select ord(a1) + count(distinct a1,a2,b) from t1 where (a1 > 'a') and (a2 > 'a');select count(distinct a1,a2,b) from t1 where (a2 >= 'b') and (b = 'a');select count(distinct a1,a2,b,c) from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121');select count(distinct a1,a2,b) from t1 where (a1 > 'a') and (a2 > 'a') and (b = 'c');select count(distinct b) from t1 where (a2 >= 'b') and (b = 'a');select ord(a1) + count(distinct a1,a2,b) from t1 where (a1 > 'a') and (a2 > 'a');---- Queries with expressions in the select clause--explain select a1,a2,b, concat(min(c), max(c)) from t1 where a1 < 'd' group by a1,a2,b;explain select concat(a1,min(c)),b from t1 where a1 < 'd' group by a1,a2,b;explain select concat(a1,min(c)),b,max(c) from t1 where a1 < 'd' group by a1,a2,b;explain select concat(a1,a2),b,min(c),max(c) from t1 where a1 < 'd' group by a1,a2,b;explain select concat(ord(min(b)),ord(max(b))),min(b),max(b) from t1 group by a1,a2;select a1,a2,b, concat(min(c), max(c)) from t1 where a1 < 'd' group by a1,a2,b;select concat(a1,min(c)),b from t1 where a1 < 'd' group by a1,a2,b;select concat(a1,min(c)),b,max(c) from t1 where a1 < 'd' group by a1,a2,b;select concat(a1,a2),b,min(c),max(c) from t1 where a1 < 'd' group by a1,a2,b;select concat(ord(min(b)),ord(max(b))),min(b),max(b) from t1 group by a1,a2;---- Negative examples: queries that should NOT be treated as optimizable by-- QUICK_GROUP_MIN_MAX_SELECT---- select a non-indexed attributeexplain select a1,a2,b,d,min(c),max(c) from t1 group by a1,a2,b;explain select a1,a2,b,d from t1 group by a1,a2,b;-- predicate that references an attribute that is after the MIN/MAX argument-- in the indexexplain select a1,a2,min(b),max(b) from t1where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') and (c > 'a111') group by a1,a2;-- predicate that references a non-indexed attributeexplain select a1,a2,b,min(c),max(c) from t1where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') and (d > 'xy2') group by a1,a2,b;explain select a1,a2,b,c from t1where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') and (d > 'xy2') group by a1,a2,b,c;-- non-equality predicate for a non-group select attributeexplain 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 argumentexplain 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 attributeexplain select a1,a2,b,max(c),min(c) from t2 where (a2 = 'a') and (b = 'b') or (b = 'a') group by a1;-- non-range predicate for the MIN/MAX attributeexplain select a1,a2,b,min(c),max(c) from t2where (c > 'a000') and (c <= 'd999') and (c like '_8__') group by a1,a2,b;-- not all attributes are indexed by one indexexplain select a1, a2, b, c, min(d), max(d) from t1 group by a1,a2,b,c;-- other aggregate functions than MIN/MAXexplain select a1,a2,count(a2) from t1 group by a1,a2,b;explain select a1,a2,count(a2) from t1 where (a1 > 'a') group by a1,a2,b;explain select sum(ord(a1)) from t1 where (a1 > 'a') group by a1,a2,b;## BUG#11044: DISTINCT or GROUP BY queries with equality predicates instead of MIN/MAX.#explain select a1 from t1 where a2 = 'b' group by a1;select a1 from t1 where a2 = 'b' group by a1;explain select distinct a1 from t1 where a2 = 'b';select distinct a1 from t1 where a2 = 'b';## Bug #12672: primary key implcitly included in every innodb index#--disable_warningscreate table t4 ( pk_col int auto_increment primary key, a1 char(64), a2 char(64), b char(16), c char(16) not null, d char(16), dummy char(64) default ' ') engine=innodb;--enable_warningsinsert into t4 (a1, a2, b, c, d, dummy) select * from t1;create index idx12672_0 on t4 (a1);create index idx12672_1 on t4 (a1,a2,b,c);create index idx12672_2 on t4 (a1,a2,b);analyze table t1;select distinct a1 from t4 where pk_col not in (1,2,3,4);drop table t1,t2,t3,t4;## Bug #6142: a problem with the empty innodb table#--disable_warningscreate table t1 ( a varchar(30), b varchar(30), primary key(a), key(b)) engine=innodb;--enable_warningsselect distinct a from t1;drop table t1;## Bug #9798: group by with rollup#--disable_warningscreate table t1(a int, key(a)) engine=innodb;--enable_warningsinsert into t1 values(1);select a, count(a) from t1 group by a with rollup;drop table t1;## Bug #13293 Wrongly used index results in endless loop.#create table t1 (f1 int, f2 char(1), primary key(f1,f2)) engine=innodb;insert into t1 values ( 1,"e"),(2,"a"),( 3,"c"),(4,"d");alter table t1 drop primary key, add primary key (f2, f1);explain select distinct f1 a, f1 b from t1;explain select distinct f1, f2 from t1;drop table t1;## Bug #14920 Ordering aggregated result sets with composite primary keys# corrupts resultset#create table t1 (c1 int not null,c2 int not null, primary key(c1,c2));insert into t1 (c1,c2) values(10,1),(10,2),(10,3),(20,4),(20,5),(20,6),(30,7),(30,8),(30,9);select distinct c1, c2 from t1 order by c2;select c1,min(c2) as c2 from t1 group by c1 order by c2;select c1,c2 from t1 group by c1,c2 order by c2;drop table t1;## Bug #16203: Analysis for possible min/max optimization erroneously# returns impossible range#CREATE TABLE t1 (a varchar(5), b int(11), PRIMARY KEY (a,b));INSERT INTO t1 VALUES ('AA',1), ('AA',2), ('AA',3), ('BB',1), ('AA',4);OPTIMIZE TABLE t1;SELECT a FROM t1 WHERE a='AA' GROUP BY a;SELECT a FROM t1 WHERE a='BB' GROUP BY a;EXPLAIN SELECT a FROM t1 WHERE a='AA' GROUP BY a;EXPLAIN SELECT a FROM t1 WHERE a='BB' GROUP BY a;SELECT DISTINCT a FROM t1 WHERE a='BB';SELECT DISTINCT a FROM t1 WHERE a LIKE 'B%';SELECT a FROM t1 WHERE a LIKE 'B%' GROUP BY a;DROP TABLE t1;## Bug #15102: select distinct returns empty result, select count # distinct > 0 (correct)#CREATE TABLE t1 ( a int(11) NOT NULL DEFAULT '0', b varchar(16) COLLATE latin1_general_ci NOT NULL DEFAULT '', PRIMARY KEY (a,b) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;delimiter |;CREATE PROCEDURE a(x INT)BEGIN DECLARE rnd INT; DECLARE cnt INT; WHILE x > 0 DO SET rnd= x % 100; SET cnt = (SELECT COUNT(*) FROM t1 WHERE a = rnd); INSERT INTO t1(a,b) VALUES (rnd, CAST(cnt AS CHAR)); SET x= x - 1; END WHILE;END|DELIMITER ;|CALL a(1000);SELECT a FROM t1 WHERE a=0;SELECT DISTINCT a FROM t1 WHERE a=0;SELECT COUNT(DISTINCT a) FROM t1 WHERE a=0;DROP TABLE t1;DROP PROCEDURE a;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -