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