Loading mysql-test/r/range.result +19 −0 Original line number Diff line number Diff line Loading @@ -768,3 +768,22 @@ SELECT * FROM t1; a 2 DROP TABLE t1; create table t1 (a int, b int, primary key(a,b)); create view v1 as select a, b from t1; INSERT INTO `t1` VALUES (0,0),(1,0),(2,0),(3,0),(4,0),(5,1),(6,1),(7,1),(8,1),(9,1),(10,2),(11,2),(12,2) ,(13,2),(14,2),(15,3),(16,3),(17,3),(18,3),(19,3); explain select * from t1 where a in (3,4) and b in (1,2,3); id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 range PRIMARY PRIMARY 8 NULL # Using where; Using index explain select * from v1 where a in (3,4) and b in (1,2,3); id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t1 range PRIMARY PRIMARY 8 NULL # Using where; Using index explain select * from t1 where a between 3 and 4 and b between 1 and 2; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 range PRIMARY PRIMARY 8 NULL # Using where; Using index explain select * from v1 where a between 3 and 4 and b between 1 and 2; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t1 range PRIMARY PRIMARY 8 NULL # Using where; Using index drop view v1; drop table t1; mysql-test/t/range.test +22 −0 Original line number Diff line number Diff line Loading @@ -578,3 +578,25 @@ DELETE FROM t1 WHERE NOT(a <=> 2); SELECT * FROM t1; DROP TABLE t1; # # BUG#13317: range optimization doesn't work for IN over VIEW. # create table t1 (a int, b int, primary key(a,b)); create view v1 as select a, b from t1; INSERT INTO `t1` VALUES (0,0),(1,0),(2,0),(3,0),(4,0),(5,1),(6,1),(7,1),(8,1),(9,1),(10,2),(11,2),(12,2) ,(13,2),(14,2),(15,3),(16,3),(17,3),(18,3),(19,3); --replace_column 9 # explain select * from t1 where a in (3,4) and b in (1,2,3); --replace_column 9 # explain select * from v1 where a in (3,4) and b in (1,2,3); --replace_column 9 # explain select * from t1 where a between 3 and 4 and b between 1 and 2; --replace_column 9 # explain select * from v1 where a between 3 and 4 and b between 1 and 2; drop view v1; drop table t1; sql/opt_range.cc +4 −4 Original line number Diff line number Diff line Loading @@ -3533,17 +3533,17 @@ static SEL_TREE *get_mm_tree(PARAM *param,COND *cond) switch (cond_func->functype()) { case Item_func::BETWEEN: if (cond_func->arguments()[0]->type() != Item::FIELD_ITEM) if (cond_func->arguments()[0]->real_item()->type() != Item::FIELD_ITEM) DBUG_RETURN(0); field_item= (Item_field*) (cond_func->arguments()[0]); field_item= (Item_field*) (cond_func->arguments()[0]->real_item()); value= NULL; break; case Item_func::IN_FUNC: { Item_func_in *func=(Item_func_in*) cond_func; if (func->key_item()->type() != Item::FIELD_ITEM) if (func->key_item()->real_item()->type() != Item::FIELD_ITEM) DBUG_RETURN(0); field_item= (Item_field*) (func->key_item()); field_item= (Item_field*) (func->key_item()->real_item()); value= NULL; break; } Loading Loading
mysql-test/r/range.result +19 −0 Original line number Diff line number Diff line Loading @@ -768,3 +768,22 @@ SELECT * FROM t1; a 2 DROP TABLE t1; create table t1 (a int, b int, primary key(a,b)); create view v1 as select a, b from t1; INSERT INTO `t1` VALUES (0,0),(1,0),(2,0),(3,0),(4,0),(5,1),(6,1),(7,1),(8,1),(9,1),(10,2),(11,2),(12,2) ,(13,2),(14,2),(15,3),(16,3),(17,3),(18,3),(19,3); explain select * from t1 where a in (3,4) and b in (1,2,3); id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 range PRIMARY PRIMARY 8 NULL # Using where; Using index explain select * from v1 where a in (3,4) and b in (1,2,3); id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t1 range PRIMARY PRIMARY 8 NULL # Using where; Using index explain select * from t1 where a between 3 and 4 and b between 1 and 2; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 range PRIMARY PRIMARY 8 NULL # Using where; Using index explain select * from v1 where a between 3 and 4 and b between 1 and 2; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t1 range PRIMARY PRIMARY 8 NULL # Using where; Using index drop view v1; drop table t1;
mysql-test/t/range.test +22 −0 Original line number Diff line number Diff line Loading @@ -578,3 +578,25 @@ DELETE FROM t1 WHERE NOT(a <=> 2); SELECT * FROM t1; DROP TABLE t1; # # BUG#13317: range optimization doesn't work for IN over VIEW. # create table t1 (a int, b int, primary key(a,b)); create view v1 as select a, b from t1; INSERT INTO `t1` VALUES (0,0),(1,0),(2,0),(3,0),(4,0),(5,1),(6,1),(7,1),(8,1),(9,1),(10,2),(11,2),(12,2) ,(13,2),(14,2),(15,3),(16,3),(17,3),(18,3),(19,3); --replace_column 9 # explain select * from t1 where a in (3,4) and b in (1,2,3); --replace_column 9 # explain select * from v1 where a in (3,4) and b in (1,2,3); --replace_column 9 # explain select * from t1 where a between 3 and 4 and b between 1 and 2; --replace_column 9 # explain select * from v1 where a between 3 and 4 and b between 1 and 2; drop view v1; drop table t1;
sql/opt_range.cc +4 −4 Original line number Diff line number Diff line Loading @@ -3533,17 +3533,17 @@ static SEL_TREE *get_mm_tree(PARAM *param,COND *cond) switch (cond_func->functype()) { case Item_func::BETWEEN: if (cond_func->arguments()[0]->type() != Item::FIELD_ITEM) if (cond_func->arguments()[0]->real_item()->type() != Item::FIELD_ITEM) DBUG_RETURN(0); field_item= (Item_field*) (cond_func->arguments()[0]); field_item= (Item_field*) (cond_func->arguments()[0]->real_item()); value= NULL; break; case Item_func::IN_FUNC: { Item_func_in *func=(Item_func_in*) cond_func; if (func->key_item()->type() != Item::FIELD_ITEM) if (func->key_item()->real_item()->type() != Item::FIELD_ITEM) DBUG_RETURN(0); field_item= (Item_field*) (func->key_item()); field_item= (Item_field*) (func->key_item()->real_item()); value= NULL; break; } Loading