Bug #13484 | Wrong result on SELECT of table with multiple keys | ||
---|---|---|---|
Submitted: | 26 Sep 2005 13:36 | Modified: | 19 Oct 2005 14:48 |
Reporter: | Berto van de Kraats | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Optimizer | Severity: | S1 (Critical) |
Version: | 5.0.14-rc-nightly-20050922 | OS: | Linux (Linux Suse SLES 9 SP1) |
Assigned to: | Sergey Petrunya | CPU Architecture: | Any |
[26 Sep 2005 13:36]
Berto van de Kraats
[26 Sep 2005 13:38]
Berto van de Kraats
mysql script to reproduce the problem
Attachment: bug13484 (text/plain), 44.50 KiB.
[26 Sep 2005 16:27]
Alexander Keremidarski
Verified on Fedora Core4 with 5.0 from BK tree: ChangeSet@1.1989.1.12, 2005-09-25 15:44:05+02:00, serg@serg.mylan To make it more obvious here is simpler WHERE clause: mysql> select t_vers,t_rele,t_cust,t_tver_1 from X where t_vers = '7.6'; +--------+--------+--------+----------+ | t_vers | t_rele | t_cust | t_tver_1 | +--------+--------+--------+----------+ | 7.6 | a | | 7.6 | | 7.6 | a | | 7.6 | +--------+--------+--------+----------+ 2 rows in set (0.01 sec) mysql> select t_vers,t_rele,t_cust,t_tver_1 from X where t_vers = '7.6' and t_rele='a' and t_cust = ' '; Empty set (0.00 sec) Empty set is obviously wrong result. mysql> EXPLAIN select t_vers,t_rele,t_cust,t_tver_1 from X where t_vers = '7.6' and t_rele='a' and t_cust = ' '\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: X type: index_merge possible_keys: IX_4,IX_5 key: IX_5,IX_4 key_len: 16,6 ref: NULL rows: 1 Extra: Using intersect(IX_5,IX_4); Using where Now let's ignore IX_4 and IX_5 mysql> select t_vers,t_rele,t_cust,t_tver_1 from X IGNORE KEY(IX_4) where t_vers = '7.6' and t_rele='a' and t_cust = ' '; +--------+--------+--------+----------+ | t_vers | t_rele | t_cust | t_tver_1 | +--------+--------+--------+----------+ | 7.6 | a | | 7.6 | | 7.6 | a | | 7.6 | +--------+--------+--------+----------+ mysql> select t_vers,t_rele,t_cust,t_tver_1 from X IGNORE KEY(IX_5) where t_vers = '7.6' and t_rele='a' and t_cust = ' '; +--------+--------+--------+----------+ | t_vers | t_rele | t_cust | t_tver_1 | +--------+--------+--------+----------+ | 7.6 | a | | 7.6 | | 7.6 | a | | 7.6 | +--------+--------+--------+----------+ 2 rows in set (0.00 sec) If only one of the above indexes is FORCEd the result is correct so the problem occurs only when Index_merge is used.
[1 Oct 2005 7: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/internals/30599
[7 Oct 2005 8:06]
Sergey Petrunya
Fix pushed into 5.0.15 tree. Bug description: Queries that are executed using index_merge union or intersection could produce wrong results if underlying table was an InnoDB table with primary key containing varchar members.
[19 Oct 2005 14:48]
Jon Stephens
Thank you for your bug report. This issue has been committed to our source repository of that product and will be incorporated into the next release. If necessary, you can access the source repository and build the latest available version, including the bugfix, yourself. More information about accessing the source trees is available at http://www.mysql.com/doc/en/Installing_source_tree.html Additional info: Documented fix in 5.0.15 changelog. Closed.