diff --git a/mysql-test/r/range.result b/mysql-test/r/range.result index 256c4ee6431288de4b7d2f0ec02af4235aa9ab65..fea5754d704354b907418f644a5dd167e43f27b4 100644 --- a/mysql-test/r/range.result +++ b/mysql-test/r/range.result @@ -256,12 +256,12 @@ INSERT INTO t2 VALUES (0),(0),(1),(1),(2),(2); explain select * from t1, t2 where (t1.key1 <t2.keya + 1) and t2.keya=3; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t2 ref j1 j1 4 const 1 Using index -1 SIMPLE t1 range i1 i1 4 NULL 7 Using where; Using index +1 SIMPLE t1 index i1 i1 4 NULL 7 Using where; Using index explain select * from t1 force index(i1), t2 force index(j1) where (t1.key1 <t2.keya + 1) and t2.keya=3; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t2 ref j1 j1 4 const 1 Using index -1 SIMPLE t1 range i1 i1 4 NULL 7 Using where; Using index +1 SIMPLE t1 index i1 i1 4 NULL 7 Using where; Using index DROP TABLE t1,t2; CREATE TABLE t1 ( a int(11) default NULL, diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 1cbbaf7c3c4c23de1c9ef11a6bfd8cf9fb84fd55..ac25f15d460126e0bee8ca5d3bdf057c425bde05 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -2257,7 +2257,8 @@ inline double get_index_only_read_time(const PARAM* param, ha_rows records, param->table->file->ref_length) + 1); read_time=((double) (records+keys_per_block-1)/ (double) keys_per_block); - return read_time; + /* Add 0.01 to avoid cost races between 'range' and 'index' */ + return read_time + 0.01; } @@ -7912,6 +7913,8 @@ int QUICK_GROUP_MIN_MAX_SELECT::reset(void) file->extra(HA_EXTRA_KEYREAD); /* We need only the key attributes */ result= file->ha_index_init(index); result= file->index_last(record); + if (result == HA_ERR_END_OF_FILE) + DBUG_RETURN(0); if (result) DBUG_RETURN(result); if (quick_prefix_select && quick_prefix_select->reset())