* Undo of range optimizer fix from previous changeset
* Fixed test results. mysql-test/r/index_merge_ror.result: Typo fix mysql-test/r/rowid_order_bdb.result: new index_merge EXPLAIN output format changes mysql-test/r/rowid_order_innodb.result: new index_merge EXPLAIN output format changes sql/opt_range.cc: Undo of previous fix: If cost(full_scan_on_covering_index) < cost(best_range_scan) < cost(full_table_scan) use full_scan_on_covering_index, not best_range_scan. The fix affects read plan choice for more queries then initially anticipated, so I'm reverting it for now, will get back to this later
This commit is contained in:
parent
1ce1880204
commit
2164db3c8c
@ -193,3 +193,4 @@ insert into t2 values ('ab', 'ab', 'uh', 'oh');
|
||||
explain select a from t2 where a='ab';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 ref a a 6 const 1 Using where
|
||||
drop table t2;
|
||||
|
@ -14,7 +14,7 @@ insert into t1 values (-5, 1, 1),
|
||||
(10, 1, 1);
|
||||
explain select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index_merge key1,key2 key1,key2 5,5 NULL 5 Using where
|
||||
1 SIMPLE t1 index_merge key1,key2 key1,key2 5,5 NULL 5 Using sort_union(key1,key2); Using where
|
||||
select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
|
||||
pk1 key1 key2
|
||||
-100 1 1
|
||||
|
@ -14,7 +14,7 @@ insert into t1 values (-5, 1, 1),
|
||||
(10, 1, 1);
|
||||
explain select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index_merge key1,key2 key1,key2 5,5 NULL 6 Using where
|
||||
1 SIMPLE t1 index_merge key1,key2 key1,key2 5,5 NULL 6 Using sort_union(key1,key2); Using where
|
||||
select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
|
||||
pk1 key1 key2
|
||||
-100 1 1
|
||||
|
@ -1610,17 +1610,6 @@ int SQL_SELECT::test_quick_select(THD *thd, key_map keys_to_use,
|
||||
}
|
||||
param.key_parts_end=key_parts;
|
||||
|
||||
/* Calculate cost of full index read for the shortest covering index */
|
||||
if (!head->used_keys.is_clear_all())
|
||||
{
|
||||
int key_for_use= find_shortest_key(head, &head->used_keys);
|
||||
double key_read_time= get_index_only_read_time(¶m, records,
|
||||
key_for_use);
|
||||
DBUG_PRINT("info", ("'all'+'using index' scan will be using key %d, "
|
||||
"read time %g", key_for_use, key_read_time));
|
||||
if (key_read_time < read_time)
|
||||
read_time= key_read_time;
|
||||
}
|
||||
|
||||
if ((tree=get_mm_tree(¶m,cond)))
|
||||
{
|
||||
@ -1683,6 +1672,19 @@ int SQL_SELECT::test_quick_select(THD *thd, key_map keys_to_use,
|
||||
SEL_IMERGE *imerge;
|
||||
TABLE_READ_PLAN *best_conj_trp= NULL, *new_conj_trp;
|
||||
LINT_INIT(new_conj_trp); /* no empty index_merge lists possible */
|
||||
|
||||
/* Calculate cost of full index read for the shortest covering index */
|
||||
if (!head->used_keys.is_clear_all())
|
||||
{
|
||||
int key_for_use= find_shortest_key(head, &head->used_keys);
|
||||
double key_read_time= get_index_only_read_time(¶m, records,
|
||||
key_for_use);
|
||||
DBUG_PRINT("info", ("'all'+'using index' scan will be using key %d, "
|
||||
"read time %g", key_for_use, key_read_time));
|
||||
if (key_read_time < read_time)
|
||||
read_time= key_read_time;
|
||||
}
|
||||
|
||||
DBUG_PRINT("info",("No range reads possible,"
|
||||
" trying to construct index_merge"));
|
||||
List_iterator_fast<SEL_IMERGE> it(tree->merges);
|
||||
|
Loading…
x
Reference in New Issue
Block a user