mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Bug #30596 GROUP BY optimization gives wrong result order
The optimization that uses a unique index to remove GROUP BY did not ensure that the index was actually used, thus violating the ORDER BY that is implied by GROUP BY. Fixed by replacing GROUP BY with ORDER BY if the GROUP BY clause contains a unique index over non-nullable field(s). In case GROUP BY ... ORDER BY null is used, GROUP BY is simply removed.
This commit is contained in:
@ -1042,6 +1042,20 @@ JOIN::optimize()
|
||||
find_field_in_order_list,
|
||||
(void *) group_list))
|
||||
{
|
||||
/*
|
||||
We have found that grouping can be removed since groups correspond to
|
||||
only one row anyway, but we still have to guarantee correct result
|
||||
order. The line below effectively rewrites the query from GROUP BY
|
||||
<fields> to ORDER BY <fields>. One exception is if skip_sort_order is
|
||||
set (see above), then we can simply skip GROUP BY.
|
||||
*/
|
||||
order= skip_sort_order ? 0 : group_list;
|
||||
/*
|
||||
If we have an IGNORE INDEX FOR GROUP BY(fields) clause, this must be
|
||||
rewritten to IGNORE INDEX FOR ORDER BY(fields).
|
||||
*/
|
||||
join_tab->table->keys_in_use_for_order_by=
|
||||
join_tab->table->keys_in_use_for_group_by;
|
||||
group_list= 0;
|
||||
group= 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user