[thelist] mysql index not being used in query
Sarah Sweeney
sarah at designshift.com
Tue May 10 09:01:23 CDT 2005
>>I'm not really sure why the query isn't using the NodeLR index - any ideas?
>
> I believe it is because you are not using NodeRight in an AND
> condition in the WHERE clause. You can confirm this by adding "FORCE
> INDEX" to the SQL query. If the EXPLAIN still doesn't use the index,
> then using the index is not possible (likely due to what I suggest
> above).
As per your suggestion, I tried:
EXPLAIN SELECT CategoryID, Title, NodeLeft, NodeRight
FROM Categories FORCE INDEX (NodeLR)
WHERE NodeLeft BETWEEN 2 AND 1705
ORDER BY NodeLeft
and got :
table | type | possible_keys | key | key_len | ref | rows | Extra
------+-------+---------------+--------+---------+--------+------+------------
Cats | range | NodeLR | NodeLR | 4 | (NULL) | 838 | Using
where
So obviously the index can be used without including both columns in the
where clause. Also, the MySQL docs say:
"If the table has a multiple-column index, any leftmost prefix of the
index can be used by the optimizer to find rows. For example, if you
have a three-column index on (col1, col2, col3), you have indexed search
capabilities on (col1), (col1, col2), and (col1, col2, col3)."
Looks like maybe my only option is to include "FORCE INDEX (NodeLR)" in
this query. <sigh>
More information about the thelist
mailing list