Bug #11945 | Index not used in 'OUTER JOIN b ON (a.a = b.a OR a.a = b.b)' | ||
---|---|---|---|
Submitted: | 14 Jul 2005 16:23 | Modified: | 15 Jan 2010 17:14 |
Reporter: | Ken Johanson | Email Updates: | |
Status: | No Feedback | Impact on me: | |
Category: | MySQL Server: Optimizer | Severity: | S2 (Serious) |
Version: | 5.0.7 | OS: | Linux (Linux /Fedora 3) |
Assigned to: | CPU Architecture: | Any |
[14 Jul 2005 16:23]
Ken Johanson
[14 Jul 2005 16:24]
Ken Johanson
Typo correction: describe SELECT '1' FROM a LEFT JOIN b ON a.a IN (b.a, b.b) (table ref in first list item)
[15 Jul 2005 5:19]
Jorge del Conde
Thanks for your bug report. Verified using 5.0.7 under Win32 ! create table a (a int not null, b int not null, primary key(a,b)); create table b (a int not null, b int not null, primary key(a,b)); mysql> describe SELECT '1' -> FROM a -> LEFT JOIN b ON a.a IN (b.a, b.b); +----+-------------+-------+--------+---------------+------+---------+------+--- ---+---------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | ro ws | Extra | +----+-------------+-------+--------+---------------+------+---------+------+--- ---+---------------------+ | 1 | SIMPLE | a | system | NULL | NULL | NULL | NULL | 0 | const row not found | | 1 | SIMPLE | b | system | NULL | NULL | NULL | NULL | 0 | const row not found | +----+-------------+-------+--------+---------------+------+---------+------+--- ---+---------------------+ 2 rows in set (0.00 sec)
[17 Jul 2005 17:23]
Igor Babaev
This is actually a request for an optimization. This optimization hopefully will be implemented in version 5.2.
[19 Jul 2005 14:59]
Ken Johanson
I'm in no position to argue... but this seems more like a bug (even if it simply has never been implemented), because other DBs (I've tried two) do search in the indexes; the query seems pretty simple; more of all, this causes a HUGE performance hit on a table that is only about 20000 rows (and my table is growing rapidly)... And 5.2 appears to be a long way out (1+ years my guess?). I'm not reliant on this beta version - I only tested on it to see if the problem went away from my 4.x production version, which is where the fix really seems needed.
[10 Aug 2005 15:14]
Ken Johanson
Please, this should be raised to a higher priority - the query is arguably very simple, but its lack of optimization yields abominable performance that appears to increase exponentially when one table's column count grows. I have a working table with only 20000 rows but the query takes 10 seconds on a 2Ghz box.. its used to take 3 seconds with half as many rows. This *certainly* is not a trivial bug (and its is a bug from a high level / end-user perspective, in the optimizer, not a 'feature request')
[10 Aug 2005 16:14]
[ name withheld ]
It is possible that these two are related. I am, however, not an expert on the 'under the hood' workings of the DBMS. This is a question better directed to the MySQL developer to whom this is assigned. As a side note, however, it would seem to me that any time a join is performed and no index is used even though an appropriate index is available that this constitutes a feature deficiency of sufficient severity to qualify as a bug.
[15 Dec 2009 17:14]
Valeriy Kravchuk
As far as I can see index is used in recent 5.0: 77-52-7-73:5.0 openxs$ bin/mysql -uroot test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.0.89-debug Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create table a (a int not null, b int not null, primary key(a,b)); Query OK, 0 rows affected (0.01 sec) mysql> create table b (a int not null, b int not null, primary key(a,b)); Query OK, 0 rows affected (0.00 sec) mysql> insert into a values(1,1), (2,2), (3,3); Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> insert into b values(1,1), (0,0); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> explain SELECT '1' -> FROM a -> LEFT JOIN b ON a.a IN (b.a, b.b) -> \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: a type: index possible_keys: NULL key: PRIMARY key_len: 8 ref: NULL rows: 3 Extra: Using index *************************** 2. row *************************** id: 1 select_type: SIMPLE table: b type: index possible_keys: NULL key: PRIMARY key_len: 8 ref: NULL rows: 2 Extra: Using index 2 rows in set (0.02 sec) Do you need anything else?
[16 Jan 2010 0:00]
Bugs System
No feedback was provided for this bug for over a month, so it is being suspended automatically. If you are able to provide the information that was originally requested, please do so and change the status of the bug back to "Open".