Bug #35206 | select query result different if the key is indexed or not | ||
---|---|---|---|
Submitted: | 11 Mar 2008 11:25 | Modified: | 7 Apr 2008 17:32 |
Reporter: | Frederic Steinfels | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Optimizer | Severity: | S1 (Critical) |
Version: | 5.1.23 | OS: | Any |
Assigned to: | Georgi Kodinov | CPU Architecture: | Any |
Tags: | different, INDEX, key, limit, order by, query, result, selct |
[11 Mar 2008 11:25]
Frederic Steinfels
[11 Mar 2008 11:26]
Frederic Steinfels
use this to fill the tables
Attachment: fillup.txt (text/plain), 39.44 KiB.
[11 Mar 2008 21:16]
Valeriy Kravchuk
Thank you for a bug report. Verified just as described. With key on column we have: mysql> explain SELECT -> (sp.`price`+10)*1.1 -> FROM -> `shipzonecountry` AS sc, -> `shipprice` AS sp -> WHERE -> sp.`shipmode_id`=14 -> AND -> sp.`shipzonecountry_code`=sc.`code` -> AND -> 5.1<sp.`maxweight` -> AND -> sc.`country_code`='DE' -> ORDER BY -> sp.`maxweight` -> LIMIT 1\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: sc type: ref possible_keys: code,code_2,country_code key: country_code key_len: 3 ref: const rows: 3 Extra: Using where; Using temporary; Using filesort *************************** 2. row *************************** id: 1 select_type: SIMPLE table: sp type: ref possible_keys: shipzonecountry_code,shipzonecountry_code_2,shipmode_id,maxweight key: shipzonecountry_code key_len: 38 ref: test.sc.code,const rows: 3 Extra: Using where 2 rows in set (0.00 sec) (Query returns one row) And without key: mysql> alter table `shipzonecountry` drop key `country_code`; Query OK, 991 rows affected (0.17 sec) Records: 991 Duplicates: 0 Warnings: 0 mysql> explain SELECT -> (sp.`price`+10)*1.1 -> FROM -> `shipzonecountry` AS sc, -> `shipprice` AS sp -> WHERE -> sp.`shipmode_id`=14 -> AND -> sp.`shipzonecountry_code`=sc.`code` -> AND -> 5.1<sp.`maxweight` -> AND -> sc.`country_code`='DE' -> ORDER BY -> sp.`maxweight` -> LIMIT 1\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: sp type: ref possible_keys: shipzonecountry_code,shipzonecountry_code_2,shipmode_id,maxweight key: shipmode_id key_len: 4 ref: const rows: 431 Extra: Using where *************************** 2. row *************************** id: 1 select_type: SIMPLE table: sc type: eq_ref possible_keys: code,code_2 key: code key_len: 37 ref: test.sp.shipzonecountry_code,const rows: 1 Extra: Using where; Using index 2 rows in set (0.00 sec) (Query returns zero rows)
[27 Mar 2008 17:39]
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/44526 ChangeSet@1.2571, 2008-03-27 19:39:21+02:00, gkodinov@magare.gmz +3 -0 Bug #35206: select query result different if the key is indexed or not The code for executing indexed ORDER BY was not setting all the internal fields correctly when selecting to execute ORDER BY over and index. Fixed by change the access method to one that will use the quick indexed access if one is selected while selecting indexed ORDER BY.
[31 Mar 2008 14:53]
Bugs System
Pushed into 5.1.24-rc
[1 Apr 2008 18:55]
Paul DuBois
Noted in 5.1.24 changelog. Queries could return different results depending on whether ORDER BY columns were indexed. Resetting to Patch queued waiting for push into 6.0.x.
[3 Apr 2008 13:02]
Bugs System
Pushed into 6.0.5-alpha
[7 Apr 2008 17:32]
Paul DuBois
Noted in 6.0.5 changelog.
[3 May 2008 6:21]
Valeriy Kravchuk
Bug #36484 was marked as a duplicate of this one.
[10 Sep 2008 20:36]
Sveta Smirnova
Bug #39234 was marked as duplicate of this one.