Bug #19372 | Optimizer does not use index anymore when WHERE index NOT IN () is added | ||
---|---|---|---|
Submitted: | 26 Apr 2006 11:57 | Modified: | 17 Apr 2007 19:56 |
Reporter: | Jochen Riehm | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Optimizer | Severity: | S2 (Serious) |
Version: | 5.0.22-BK, 5.0.19 | OS: | Linux (Debian Linux, Kernel 2.6.8) |
Assigned to: | Georgi Kodinov | CPU Architecture: | Any |
[26 Apr 2006 11:57]
Jochen Riehm
[26 Apr 2006 11:57]
Jochen Riehm
Table dump of test case
Attachment: index_where_not_in_table.sql.bz2 (application/x-bzip2, text), 190.24 KiB.
[26 Apr 2006 14:23]
Valeriy Kravchuk
Thank you for a bug report. Verified just as described on data you uploded, with 5.0.22-BK: mysql> SELECT VERSION(); +-----------+ | VERSION() | +-----------+ | 5.0.22 | +-----------+ 1 row in set (0.00 sec) mysql> ANALYZE TABLE index_where_not_in; +----------------------------+---------+----------+----------+ | Table | Op | Msg_type | Msg_text | +----------------------------+---------+----------+----------+ | db19372.index_where_not_in | analyze | status | OK | +----------------------------+---------+----------+----------+ 1 row in set (0.02 sec) mysql> EXPLAIN -> SELECT COUNT(*) -> FROM index_where_not_in f1 -> INNER JOIN index_where_not_in f2 -> ON ( f1.mnr_id=f2.mnr_id AND f1.id<f2.id ) -> WHERE 1\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: f1 type: index possible_keys: sani_index key: sani_index key_len: 8 ref: NULL rows: 54850 Extra: Using index *************************** 2. row *************************** id: 1 select_type: SIMPLE table: f2 type: ref possible_keys: sani_index key: sani_index key_len: 4 ref: db19372.f1.mnr_id rows: 5 Extra: Using where; Using index 2 rows in set (0.00 sec) mysql> EXPLAIN -> SELECT COUNT(*) -> FROM index_where_not_in f1 -> INNER JOIN index_where_not_in f2 -> ON ( f1.mnr_id=f2.mnr_id AND f1.id<f2.id ) -> WHERE 1 -> AND f1.mnr_id NOT IN -> (11920035,784894,785671,111146418,111132393,111159094,111152706)\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: f1 type: index possible_keys: sani_index key: sani_index key_len: 8 ref: NULL rows: 54850 Extra: Using where; Using index *************************** 2. row *************************** id: 1 select_type: SIMPLE table: f2 type: index possible_keys: sani_index key: sani_index key_len: 8 ref: NULL rows: 41138 Extra: Using where; Using index 2 rows in set (0.01 sec) It is a bug!
[10 Apr 2007 16:08]
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/24190 ChangeSet@1.2435, 2007-04-10 19:08:08+03:00, gkodinov@magare.gmz +2 -0 Bug #19372: Added a test case. The problem was fixed by the fix for bug #17379. The problem was that because of some conditions the optimizer always preferred range or full index scan access methods to lookup access methods even when the latter were much cheaper.
[15 Apr 2007 16:48]
Bugs System
Pushed into 5.1.18-beta
[15 Apr 2007 16:53]
Bugs System
Pushed into 5.0.40
[17 Apr 2007 19:56]
Paul DuBois
Noted in 5.0.40, 5.1.18 changelogs.