Current Path : /home/usr.opt/mysql57/mysql-test/t/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //home/usr.opt/mysql57/mysql-test/t/index_merge_myisam.test |
# This is a MyISAM only test and hance should retain force_myisam_default. --source include/force_myisam_default.inc --source include/have_myisam.inc #Want to skip this test from daily Valgrind execution --source include/no_valgrind_without_big.inc # t/index_merge_myisam.test # # Index merge tests # # Last update: # 2006-08-07 ML test refactored (MySQL 5.1) # Main code of several index_merge tests # -> include/index_merge*.inc # wrapper t/index_merge_innodb.test sources now several # include/index_merge*.inc files # let $engine_type= MyISAM; # MyISAM supports Merge tables let $merge_table_support= 1; --source include/index_merge1.inc --source include/index_merge_ror.inc --source include/index_merge2.inc --source include/index_merge_2sweeps.inc --source include/index_merge_ror_cpk.inc --echo # --echo # Generic @@optimizer_switch tests (move those into a separate file if --echo # we get another @@optimizer_switch user) --echo # select @@optimizer_switch; set optimizer_switch='index_merge=off,index_merge_union=off'; select @@optimizer_switch; set optimizer_switch='index_merge_union=on'; select @@optimizer_switch; set optimizer_switch='default,index_merge_sort_union=off'; select @@optimizer_switch; set optimizer_switch=4; --error ER_WRONG_VALUE_FOR_VAR set optimizer_switch=NULL; --error ER_WRONG_VALUE_FOR_VAR set optimizer_switch='default,index_merge'; --error ER_WRONG_VALUE_FOR_VAR set optimizer_switch='index_merge=index_merge'; --error ER_WRONG_VALUE_FOR_VAR set optimizer_switch='index_merge=on,but...'; --error ER_WRONG_VALUE_FOR_VAR set optimizer_switch='index_merge='; --error ER_WRONG_VALUE_FOR_VAR set optimizer_switch='index_merge'; --error ER_WRONG_VALUE_FOR_VAR set optimizer_switch='on'; --error ER_WRONG_VALUE_FOR_VAR set optimizer_switch='index_merge=on,index_merge=off'; --error ER_WRONG_VALUE_FOR_VAR set optimizer_switch='index_merge_union=on,index_merge_union=default'; --error ER_WRONG_VALUE_FOR_VAR set optimizer_switch='default,index_merge=on,index_merge=off,default'; set optimizer_switch=default; set optimizer_switch='index_merge=off,index_merge_union=off,default'; select @@optimizer_switch; set optimizer_switch=default; # Check setting defaults for global vars select @@global.optimizer_switch; set @@global.optimizer_switch=default; select @@global.optimizer_switch; --echo # --echo # Check index_merge's @@optimizer_switch flags --echo # select @@optimizer_switch; create table t0 (a int); insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); create table t1 (a int, b int, c int, filler char(100), key(a), key(b), key(c)); insert into t1 select A.a * B.a*10 + C.a*100, A.a * B.a*10 + C.a*100, A.a, 'filler' from t0 A, t0 B, t0 C; --echo This should use union: explain select * from t1 where a=1 or b=1; --echo This should use ALL: set optimizer_switch='default,index_merge=off'; explain select * from t1 where a=1 or b=1; --echo This should use sort-union: set optimizer_switch='default,index_merge_union=off'; explain select * from t1 where a=1 or b=1; --echo This will use sort-union: set optimizer_switch=default; explain select * from t1 where a<1 or b <1; --echo This should use ALL: set optimizer_switch='default,index_merge_sort_union=off'; explain select * from t1 where a<1 or b <1; --echo This should use ALL: set optimizer_switch='default,index_merge=off'; explain select * from t1 where a<1 or b <1; --echo This will use sort-union: set optimizer_switch='default,index_merge_union=off'; explain select * from t1 where a<1 or b <1; alter table t1 add d int, add key(d); update t1 set d=a; --echo This will use sort_union: set optimizer_switch=default; explain select * from t1 where (a=3 or b in (1,2)) and (c=3 or d=4); --echo And if we disable sort_union, union: set optimizer_switch='default,index_merge_sort_union=off'; explain select * from t1 where (a=3 or b in (1,2)) and (c=3 or d=4); drop table t1; # Now test that intersection can be disabled create table t1 ( a int, b int, c int, filler1 char(200), filler2 char(200), key(a),key(b),key(c) ); insert into t1 select A.a+10*B.a, A.a+10*B.a, A.a+10*B.a+100*C.a, 'foo', 'bar' from t0 A, t0 B, t0 C, t0 D where D.a<5; --echo This should be intersect: set optimizer_switch=default; explain select * from t1 where a=10 and b=10; --echo No intersect when index_merge is disabled: set optimizer_switch='default,index_merge=off'; explain select * from t1 where a=10 and b=10; --echo No intersect if it is disabled: set optimizer_switch='default,index_merge_intersection=off'; explain select * from t1 where a=10 and b=10; --echo Do intersect when union was disabled set optimizer_switch='default,index_merge_union=off'; explain select * from t1 where a=10 and b=10; --echo Do intersect when sort_union was disabled set optimizer_switch='default,index_merge_sort_union=off'; explain select * from t1 where a=10 and b=10; # Now take union-of-intersection and see how we can disable parts of it --echo This will use intersection inside a union: set optimizer_switch=default; explain select * from t1 where a=10 and b=10 or c=10; --echo Should be only union left: set optimizer_switch='default,index_merge_intersection=off'; explain select * from t1 where a=10 and b=10 or c=10; --echo This will switch to sort-union (intersection will be gone, too, --echo thats a known limitation: set optimizer_switch='default,index_merge_union=off'; explain select * from t1 where a=10 and b=10 or c=10; set optimizer_switch=default; show variables like 'optimizer_switch'; drop table t0, t1;