Steven Roussey wrote:

>The corollary to the above quote is that MySQL can not use indexes with
>an OR clause at the base level.
>
MySQL *does* use the index on a different server, though, it just 
doesn't use the index on that server.  Compare the results of EXPLAIN 
queries on the two servers (after ANALYZE TABLE was run):

Broken server:

mysql> EXPLAIN SELECT bug_id FROM bugs WHERE bug_status IN ('NEW', 
'ASSIGNED', 'REOPENED');
+-------+------+---------------+------+---------+------+--------+------------+
| table | type | possible_keys | key  | key_len | ref  | rows   | 
Extra      |
+-------+------+---------------+------+---------+------+--------+------------+
| bugs  | ALL  | bug_status    | NULL |    NULL | NULL | 139425 | where 
used |
+-------+------+---------------+------+---------+------+--------+------------+

Working server:

mysql> EXPLAIN SELECT bug_id FROM bugs WHERE bug_status IN ('NEW', 
'ASSIGNED', 'REOPENED');
+-------+-------+---------------+------------+---------+------+-------+------------+
| table | type  | possible_keys | key        | key_len | ref  | rows  | 
Extra      |
+-------+-------+---------------+------------+---------+------+-------+------------+
| bugs  | range | bug_status    | bug_status |       1 | NULL | 20502 | 
where used |
+-------+-------+---------------+------------+---------+------+-------+------------+

My initial hunch was a bug in 3.23.44 (the working server was running 
3.23.41 and the broken server was running 3.23.44)), but that doesn't 
seem to be the case, since I upgraded the working server to 3.23.44 and 
found that it continues to correctly use the index for this query. 
 Other possibilities include platform (the working server is Redhat 
Linux 7.2 while the broken server is SunOS 5.7) and configuration, but 
I'm not sure how to diagnose further or what to look for in the 
configuration files.

Note that although this particular query is trivial, it is a base for 
more complex queries with one-to-many joins selecting large numbers of 
records, and narrowing the range of records to join can significantly 
increase query performance in those situations.

-myk



---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to