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.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.058 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.