Задать вопрос

Долгое выполнение запросов в MySQL

Добрый день.
Неожиданно для меня, один из проектов стал очень быстро развиваться и сейчас встала проблема с базой данных.
Используется связка PHP + MySQL.

Есть таблица, в ней уже ~20 млн записей %)
Структура таблицы:

+---------+---------------+------+-----+---------+-------+
| Field   | Type          | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| task_id | int(9)        | NO   | PRI | NULL    |       |
| user_id | int(9)        | NO   | PRI | NULL    |       |
| checked | enum('0','1') | NO   | MUL | 0       |       |
| taken   | enum('0','1') | NO   | MUL | 0       |       |
+---------+---------------+------+-----+---------+-------+


Запрос:
SELECT DISTINCT `task_id` FROM `tasks_pending` WHERE `checked`='0' AND `taken`='0' LIMIT 50;

Проблема в том, что время выполнения запросов очень большое, ~3 минут, что недопустимо.

Начитался про индексы, расставил все что мог:
image

Первый индекс (task_id) убирать нельзя, он в основе лежит.
Машина довольно мощная и думаю, что должна тянуть быстрее: Intel® Core™ i7-2600, RAM: 16 GB, вся таблица должна влезать целиком.

Машина настраивалась скриптом mysqltuner, всегда его использовал и не испытывал проблем, пока не столкнулся с High-Load'ом.

EXPLAIN говорит следующее: скриншот, потому что не влезает
Подскажите пожалуйста, что я сделал неверно и как это исправить? Спасибо.

UPD: Огромное спасибо всем за советы, каждый совет хороший, поэтому лучшего ответа выбрать не могу, всех поблагодарил за помощь в профиле.
  • Вопрос задан
  • 7726 просмотров
Подписаться 17 Комментировать
Подписчики вопроса 17 К ответам на вопрос (7)