Добрый день.
Неожиданно для меня, один из проектов стал очень быстро развиваться и сейчас встала проблема с базой данных.
Используется связка 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 минут, что недопустимо.
Начитался про индексы, расставил все что мог:
Первый индекс (task_id) убирать нельзя, он в основе лежит.
Машина довольно мощная и думаю, что должна тянуть быстрее: Intel® Core™ i7-2600, RAM: 16 GB, вся таблица должна влезать целиком.
Машина настраивалась скриптом mysqltuner, всегда его использовал и не испытывал проблем, пока не столкнулся с High-Load'ом.
EXPLAIN говорит следующее:
скриншот, потому что не влезает
Подскажите пожалуйста, что я сделал неверно и как это исправить? Спасибо.
UPD: Огромное спасибо всем за советы, каждый совет хороший, поэтому лучшего ответа выбрать не могу, всех поблагодарил за помощь в профиле.