Eu tenho uma tabela MySQL muito grande com cerca de 150.000 linhas de dados. Atualmente, quando tento executar
SELECT * FROM table WHERE id = '1';
o código funciona bem, pois o campo ID é o índice principal. No entanto, para um desenvolvimento recente no projeto, tenho que pesquisar no banco de dados por outro campo. Por exemplo:
SELECT * FROM table WHERE product_id = '1';
Este campo não foi indexado anteriormente; no entanto, eu adicionei um, então o mysql agora indexa o campo, mas quando tento executar a consulta acima, ela é executada muito lentamente. Uma consulta EXPLAIN revela que não há um índice para o campo product_id quando eu já adicionei um, e, como resultado, a consulta leva de 20 a 30 minutos para retornar uma única linha.
Meus resultados completos de EXPLAIN são:
| id | select_type | table | type | possible_keys| key | key_len | ref | rows | Extra |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
| 1 | SIMPLE | table | ALL | NULL | NULL | NULL | NULL |157211 | Using where |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
Pode ser útil observar que acabei de dar uma olhada e o campo ID é armazenado como INT, enquanto o campo PRODUCT_ID é armazenado como VARCHAR. Essa poderia ser a fonte do problema?
EXPLAIN
resultados completos ? Você tem certeza de que não há índice? Ou o índice está lá, mas o MySQL está optando por não usá-lo?