Hi All

Could someone explain to me why an index in a select I am doing is only
sometimes used.
The select I do is a complex one with multiple tables, and when it uses the
index it takes 1.5 seconds, but when it dosnt it takes 1 min and 25-50
seconds.
I have simplified it down and founed the place the problem is....see
explains bellow:

mysql> explain select * from mailstat where domain_id in(1,3,4,7,50,20,11);
+----------+-------+---------------+------+---------+------+--------+-------
-----+
| table    | type  | possible_keys | key  | key_len | ref  | rows   | Extra
|
+----------+-------+---------------+------+---------+------+--------+-------
-----+
| mailstat | range | ind4          | ind4 |       4 | NULL | 239862 | where
used |
+----------+-------+---------------+------+---------+------+--------+-------
-----+
1 row in set (0.00 sec)
*notice ind4 is used

mysql> explain select * from mailstat where domain_id in(1,2);
+----------+------+---------------+------+---------+------+---------+-------
-----+
| table    | type | possible_keys | key  | key_len | ref  | rows    | Extra
|
+----------+------+---------------+------+---------+------+---------+-------
-----+
| mailstat | ALL  | ind4          | NULL |    NULL | NULL | 2955648 | where
used |
+----------+------+---------------+------+---------+------+---------+-------
-----+
1 row in set (0.00 sec)
*notice ind4 is NOT used

mysql> explain select * from mailstat where domain_id in(1);
+----------+-------+---------------+------+---------+------+--------+-------
-----+
| table    | type  | possible_keys | key  | key_len | ref  | rows   | Extra
|
+----------+-------+---------------+------+---------+------+--------+-------
-----+
| mailstat | range | ind4          | ind4 |       4 | NULL | 174922 | where
used |
+----------+-------+---------------+------+---------+------+--------+-------
-----+
1 row in set (0.00 sec)
*notice ind4 is used

mysql> explain select * from mailstat where domain_id in(2);
+----------+------+---------------+------+---------+------+---------+-------
-----+
| table    | type | possible_keys | key  | key_len | ref  | rows    | Extra
|
+----------+------+---------------+------+---------+------+---------+-------
-----+
| mailstat | ALL  | ind4          | NULL |    NULL | NULL | 2955666 | where
used |
+----------+------+---------------+------+---------+------+---------+-------
-----+
1 row in set (0.00 sec)
*notice ind4 is NOT used

Basicaly, when I use '2' in the in() statement (and one or two other values
from hundreds that do work), the index is not used.

Initialy I thought that maybe the index was corupted, so I built a copy of
the table, and inserted a handfull of rows, but the I got the same results,
except for my new table 1 and 3 didnt work, but 2 did!.

Out of interest I tried other indexes and found results like:

mysql> explain select * from mailstat where  id<558693;
+----------+-------+---------------+---------+---------+------+--------+----
--------+
| table    | type  | possible_keys | key     | key_len | ref  | rows   |
Extra    |
+----------+-------+---------------+---------+---------+------+--------+----
--------+
| mailstat | range | PRIMARY       | PRIMARY |       4 | NULL | 511375 |
where used |
+----------+-------+---------------+---------+---------+------+--------+----
--------+
1 row in set (0.00 sec)
*primary key is used

mysql> explain select * from mailstat where  id<558694;
+----------+------+---------------+------+---------+------+---------+-------
-----+
| table    | type | possible_keys | key  | key_len | ref  | rows    | Extra
|
+----------+------+---------------+------+---------+------+---------+-------
-----+
| mailstat | ALL  | PRIMARY       | NULL |    NULL | NULL | 2956363 | where
used |
+----------+------+---------------+------+---------+------+---------+-------
-----+
1 row in set (0.00 sec)
*primary key is NOT used

If anyone could shed some light on this I would b most greatful :)

Cheers, Steve



---------------------------------------------------------------------
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