Как добавить индексы в таблицы MySQL?

У меня есть очень большая таблица 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. Может ли это быть источником проблемы?

379
задан enharmonic 17 July 2019 в 23:56
поделиться