diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 353a4623962d6d631db068c7a3b4e3fbe4dbee8b..f1ab998c0fa88d1fd6e3ddb8ab65abefb76b5959 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -968,10 +968,20 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds, } } } + /* + Here we sort rows for ORDER BY/GROUP BY clause, if the optimiser + chose FILESORT to be faster than INDEX SCAN or there is no + suitable index present. + Note, that create_sort_index calls test_if_skip_sort_order and may + finally replace sorting with index scan if there is a LIMIT clause in + the query. XXX: it's never shown in EXPLAIN! + OPTION_FOUND_ROWS supersedes LIMIT and is taken into account. + */ if (create_sort_index(&join.join_tab[join.const_tables], group ? group : order, select_limit, - thd->select_limit)) + join.select_options & OPTION_FOUND_ROWS ? + HA_POS_ERROR : thd->select_limit)) goto err; } join.having=having; // Actually a parameter