Bug #17711 | ORDER BY in DELETE forces filesort, even when applicable indexes exit | ||
---|---|---|---|
Submitted: | 24 Feb 2006 20:33 | Modified: | 8 Feb 2007 18:43 |
Reporter: | Domas Mituzas | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Optimizer | Severity: | S5 (Performance) |
Version: | 4.0, 5.1-beta | OS: | Linux (Linux) |
Assigned to: | Evgeny Potemkin | CPU Architecture: | Any |
[24 Feb 2006 20:33]
Domas Mituzas
[24 Feb 2006 20:35]
Domas Mituzas
clarification: @a in select returns 114 as well verified on: 4.0.26, 5.1.8-bk 20050221 build
[23 Dec 2006 16:53]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/17354 ChangeSet@1.2584, 2006-12-23 19:53:02+03:00, evgen@moonbone.local +3 -0 Bug#17711: DELETE isn't using index when ORDER BY, LIMIT and non-restricting WHERE is present. If an index is defined and WHERE clause is present but can't be used for index access (like WHERE @a_var:= field) DELETE always falls back to filesort. Even if there is an index which can be used to speedup sorting by the ORDER BY list. Now if there is the WHERE clause present but it can't be used to build a quick select then the mysql_delete() tries to use an index like there is no WHERE clause at all.
[10 Jan 2007 17:26]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/17870 ChangeSet@1.2584, 2007-01-10 20:26:09+03:00, evgen@moonbone.local +3 -0 Bug#17711: DELETE doesn't using index when ORDER BY, LIMIT and non-restricting WHERE is present. If a DELETE statement with ORDER BY and LIMIT contains a WHERE clause with conditions that for sure cannot be used for index access (like in WHERE @var:= field) the execution always follows the filesort path. It happens currently even when for the above case there is an index that can be used to speedup sorting by the order by list. Now if a DELETE statement with ORDER BY and LIMIT contains such WHERE clause conditions that cannot be used to build any quick select then the mysql_delete() tries to use an index like there is no WHERE clause at all.
[11 Jan 2007 13:05]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/17929 ChangeSet@1.2584, 2007-01-11 16:05:03+03:00, evgen@moonbone.local +3 -0 Bug#17711: DELETE doesn't use index when ORDER BY, LIMIT and non-restricting WHERE is present. If a DELETE statement with ORDER BY and LIMIT contains a WHERE clause with conditions that for sure cannot be used for index access (like in WHERE @var:= field) the execution always follows the filesort path. It happens currently even when for the above case there is an index that can be used to speedup sorting by the order by list. Now if a DELETE statement with ORDER BY and LIMIT contains such WHERE clause conditions that cannot be used to build any quick select then the mysql_delete() tries to use an index like there is no WHERE clause at all.
[28 Jan 2007 2:00]
Igor Babaev
Pushed to 4.1.23, 5.0.36, 5.1.16-beta main trees.
[8 Feb 2007 18:43]
Paul DuBois
Noted in 4.1.23, 5.0.36, 5.1.16 changelogs.