summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <sergefp@mysql.com>2004-05-29 17:50:05 +0400
committerunknown <sergefp@mysql.com>2004-05-29 17:50:05 +0400
commit2164db3c8c4c086dcc16d73baf7557a344d82129 (patch)
tree0091eca0060a62efd981e070aa6e5280c24378cd /sql
parent1ce1880204149404e09411505d457c452a29d55b (diff)
downloadmariadb-git-2164db3c8c4c086dcc16d73baf7557a344d82129.tar.gz
* 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
Diffstat (limited to 'sql')
-rw-r--r--sql/opt_range.cc24
1 files changed, 13 insertions, 11 deletions
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index ee328dadad6..59ded7354f1 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -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(&param, 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(&param,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(&param, 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);