Код: Выделить всё
explain SELECT count(1) FROM log WHERE (`date-time` BETWEEN '2007-06-27' AND '2007-06-27' + INTERVAL 1 DAY) AND `text-action` = '32' AND ( dst_email LIKE '%user@domain.ru%' );Код: Выделить всё
explain SELECT count(1) FROM log WHERE (`date-time` BETWEEN '2007-06-27' AND '2007-06-27' + INTERVAL 1 DAY) AND `text-action` != '32' AND ( dst_email LIKE '%user@domain.ru%' );А во втором = ALL (Что не есть гуд и поиск идёт по всем данным)
Подробнее:
Код: Выделить всё
mysql> explain SELECT count(1) FROM log WHERE (`date-time` BETWEEN '2007-06-27' AND '2007-06-27' + INTERVAL 1 DAY) AND `text-action` = '32' AND ( dst_email LIKE '%user@domain.ru%' );
+----+-------------+-------+-------+---------------------------------+-----------+---------+------+------+-------------+
| id | select_type | table | type  | possible_keys                   | key       | key_len | ref  | rows | Extra       |
+----+-------------+-------+-------+---------------------------------+-----------+---------+------+------+-------------+
|  1 | SIMPLE      | log   | range | text-action,date-time,text-date | text-date |       6 | NULL |  149 | Using where |
+----+-------------+-------+-------+---------------------------------+-----------+---------+------+------+-------------+Код: Выделить всё
mysql> explain SELECT count(1) FROM log WHERE (`date-time` BETWEEN '2007-06-27' AND '2007-06-27' + INTERVAL 1 DAY) AND `text-action` != '32' AND ( dst_email LIKE '%user@domain.ru%' );
+----+-------------+-------+------+---------------------------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys                   | key  | key_len | ref  | rows | Extra       |
+----+-------------+-------+------+---------------------------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | log   | ALL  | text-action,date-time,text-date | NULL |    NULL | NULL | 2322 | Using where |
+----+-------------+-------+------+---------------------------------+------+---------+------+------+-------------+Что делать, как лечить и почему не используется индекс? Никакой.
Описалово:
Код: Выделить всё
ALL
    Для каждой комбинации строк из предыдущих таблиц будет производиться полный просмотр этой таблицы. Это обычно плохо, если таблица - первая из не отмеченных как const, и очень плохо во всех остальных случаях. Как правило, можно избегать типа связывания ALL - путем добавления большего количества индексов таким образом, чтобы строка могла быть найдена при помощи константных значений или значений столбца из предыдущих таблиц.

