Tengo una tabla MySQL muy grande con aproximadamente 150,000 filas de datos. Actualmente, cuando intento ejecutar
SELECT * FROM table WHERE id = '1';
el código funciona bien ya que el campo ID es el índice primario. Sin embargo, para un desarrollo reciente en el proyecto, tengo que buscar en la base de datos por otro campo. Por ejemplo:
SELECT * FROM table WHERE product_id = '1';
Este campo no fue indexado previamente; sin embargo, he agregado uno, por lo que mysql ahora indexa el campo, pero cuando intento ejecutar la consulta anterior, se ejecuta muy lentamente. Una consulta EXPLAIN revela que no hay índice para el campo product_id cuando ya he agregado uno, y como resultado la consulta tarda entre 20 minutos y 30 minutos en devolver una sola fila.
Mis resultados completos de EXPLAIN son:
| id | select_type | table | type | possible_keys| key | key_len | ref | rows | Extra |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
| 1 | SIMPLE | table | ALL | NULL | NULL | NULL | NULL |157211 | Using where |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
Puede ser útil tener en cuenta que acabo de echar un vistazo, y el campo ID se almacena como INT, mientras que el campo PRODUCT_ID se almacena como VARCHAR. ¿Podría ser esta la fuente del problema?
EXPLAIN
resultados completos ? ¿Estás seguro de que no hay índice? ¿O el índice está allí, pero MySQL está eligiendo no usarlo?