diff options
Diffstat (limited to 'sql')
-rw-r--r-- | sql/sql_select.cc | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 87812414881..057f0bd9483 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -6021,7 +6021,7 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit, /* check if we can use a key to resolve the group */ /* Tables using JT_NEXT are handled here */ uint nr; - key_map keys=usable_keys; + key_map keys_to_use=~0,keys=usable_keys; /* If not used with LIMIT, only use keys if the whole query can be @@ -6029,7 +6029,17 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit, retrieving all rows through an index. */ if (select_limit >= table->file->records) - keys&= (table->used_keys | table->file->keys_to_use_for_scanning()); + keys_to_use= (table->used_keys |table->file->keys_to_use_for_scanning()); + + /* + We are adding here also the index speified in FORCE INDEX clause, + if any. + This is to allow users to use index in ORDER BY. + */ + + if (table->force_index) + keys_to_use|= table->keys_in_use_for_query; + keys&= keys_to_use; for (nr=0; keys ; keys>>=1, nr++) { |