| Bug #42785 | mysql gives the wrong result with some special usage | ||
|---|---|---|---|
| Submitted: | 12 Feb 2009 10:12 | Modified: | 16 Jan 2013 15:48 |
| Reporter: | Yu Hang | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Optimizer | Severity: | S2 (Serious) |
| Version: | 5.0/5.1/6.0 | OS: | Linux (Ubuntu Intrepid) |
| Assigned to: | Sergei Glukhov | CPU Architecture: | Any |
[12 Feb 2009 10:12]
Yu Hang
[12 Feb 2009 10:47]
MySQL Verification Team
Repeatable with current source trees:
c:\dbs>c:\dbs\5.0\bin\mysql -uroot --port=3500 --prompt="mysql 5.0 > "
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.78-Win x64 bzr revno 2737-log Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql 5.0 > use test
Database changed
mysql 5.0 > CREATE TABLE `bug` (
-> `c1` varchar( 20 ) NOT NULL ,
-> `c2` int NOT NULL ,
-> KEY `k` ( `c2` , `c1` ) # required
-> ) ENGINE = MYISAM ;
Query OK, 0 rows affected (0.04 sec)
mysql 5.0 >
mysql 5.0 > INSERT INTO `bug` (
-> `c1` ,
-> `c2`
-> )
-> VALUES ( # all of the three values are required
-> 'a', '0'
-> ), (
-> 'b', '1'
-> ), (
-> 'c', '2'
-> );
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql 5.0 >
mysql 5.0 > SELECT c2
-> FROM `bug`
-> WHERE (
-> c1 = 'x' # anything except a and b
-> AND c2 =0
-> )
-> OR (
-> c1 = 'b'
-> AND c2 =1
-> )
-> GROUP BY `c2` ;
Empty set (0.00 sec)
mysql 5.0 > alter table bug drop key k;
Query OK, 3 rows affected (0.16 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql 5.0 > SELECT c2
-> FROM `bug`
-> WHERE (
-> c1 = 'x' # anything except a and b
-> AND c2 =0
-> )
-> OR (
-> c1 = 'b'
-> AND c2 =1
-> )
-> GROUP BY `c2` ;
+----+
| c2 |
+----+
| 1 |
+----+
1 row in set (0.00 sec)
mysql 5.0 >
[12 Feb 2009 10:54]
MySQL Verification Team
Thank you for the bug report. Verified as described even on older version like 5.0.22.
[16 Jan 2013 15:48]
Paul DuBois
Noted in 5.1.69, 5.5.31, 5.6.11, 5.7.1 changelogs. The optimizer used loose index scan for some queries for which this access method is inapplicable.
