У меня есть очень большая таблица MySQL с около 150 000 строк данных. В настоящее время, когда я пытаюсь запустить
SELECT * FROM table WHERE id = '1';
код работает нормально, так как поле ID является основным индексом. Тем не менее, для недавнего развития проекта, я должен искать в базе данных по другому полю. Например:
SELECT * FROM table WHERE product_id = '1';
Это поле не было ранее проиндексировано; тем не менее, я добавил один, поэтому mysql теперь индексирует поле, но когда я пытаюсь выполнить вышеуказанный запрос, он выполняется очень медленно. Запрос EXPLAIN показывает, что для поля product_id нет индекса, когда я его уже добавил, и в результате запрос занимает от 20 минут до 30 минут, чтобы вернуть одну строку.
Мои полные результаты EXPLAIN:
| id | select_type | table | type | possible_keys| key | key_len | ref | rows | Extra |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
| 1 | SIMPLE | table | ALL | NULL | NULL | NULL | NULL |157211 | Using where |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
Может быть полезно отметить, что я только что посмотрел, и поле ID хранится как INT, тогда как поле PRODUCT_ID хранится как VARCHAR. Может ли это быть источником проблемы?
EXPLAIN
результаты? Вы уверены, что нет индекса? Или индекс есть, но MySQL решил не использовать его?