Bug #32815 Problem with ORDER BY if WHERE is used with NOT NULL
| Submitted: | 28 Nov 2007 13:25 | Modified: | 14 Jan 2008 18:13 |
|---|---|---|---|
| Reporter: | Jrme Despatis (Candidate Quality Contributor) | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Optimizer | Severity: | S3 (Non-critical) |
| Version: | 5.0.45 | OS: | Linux (Debian testing) |
| Assigned to: | Igor Babaev | CPU Architecture: | Any |
| Tags: | NOT NULL, order by | ||
[28 Nov 2007 13:25]
Jrme Despatis
[28 Nov 2007 13:27]
Jrme Despatis
File used in my bug report
Attachment: bug.sql (text/x-sql), 965 bytes.
[28 Nov 2007 13:42]
Heikki Tuuri
This is probably a bug in MySQL's query optimizer.
[28 Nov 2007 16:58]
MySQL Verification Team
Thank you for the bug report. 5.1 server isn't affected: [miguel@skybr 5.0]$ bin/mysql -uroot db1 Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.0.54-debug Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> SELECT * FROM `bug` WHERE ref_member = 19130380 OR ref_member IS NULL ORDER BY date DESC; +------------+-------------+--------+---------------------+ | ref_member | ref_message | type | date | +------------+-------------+--------+---------------------+ | 19130380 | 11 | member | 2007-11-28 14:02:24 | | NULL | 8 | member | 2007-11-28 14:16:35 | | NULL | 4 | member | 2007-11-28 14:15:54 | +------------+-------------+--------+---------------------+ 3 rows in set (0.00 sec) *********************_________************************* [miguel@skybr 5.1]$ bin/mysqladmin -uroot create db1 [miguel@skybr 5.1]$ bin/mysql -uroot db1 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.1.23-rc-debug Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> source /home/miguel/a/bug.sql Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM `bug` WHERE ref_member = 19130380 OR ref_member IS NULL ORDER BY date DESC; +------------+-------------+--------+---------------------+ | ref_member | ref_message | type | date | +------------+-------------+--------+---------------------+ | NULL | 8 | member | 2007-11-28 14:16:35 | | NULL | 4 | member | 2007-11-28 14:15:54 | | 19130380 | 11 | member | 2007-11-28 14:02:24 | +------------+-------------+--------+---------------------+ 3 rows in set (0.00 sec) mysql>
[8 Dec 2007 1:13]
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/39594 ChangeSet@1.2595, 2007-12-07 17:14:59-08:00, igor@olga.mysql.com +3 -0 Fixed bug #32815. The index (key_part_1, key_part-2) was erroneously considered as compatible with the required ordering in the function test_test_if_order_by_key when a query with an ORDER BY clause contained a condition of the form key_part_1=const OR key_part_1 IS NULL and the order list contained only key_part_2. This happened because the value of the const_key_parts field in the KEYUSE structure was not formed correctly for the keys that could be used for ref_or_null access. This was fixed in the code of the update_ref_and_keys function. The problem could not manifest itself for MyISAM databases because the implementation of the keys_to_use_for_scanning() handler function always returns an empty bitmap for the MyISAM engine.
[14 Dec 2007 8:14]
Bugs System
Pushed into 5.0.54
[14 Dec 2007 8:17]
Bugs System
Pushed into 5.1.23-rc
[14 Dec 2007 8:20]
Bugs System
Pushed into 6.0.5-alpha
[14 Jan 2008 18:13]
Jon Stephens
Since this issue does not appear in 5.1 (per note from Miguel) or 6.0 (per my test with an unpatched 6.0-bk), fix was documented in 5.0.54 changelog only as follows:
An ORDER BY query using IS
NULL in the WHERE clause did not
return correct results.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.042 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.