J'ai une très grande table MySQL avec environ 150 000 lignes de données. Actuellement, quand j'essaie de courir
SELECT * FROM table WHERE id = '1';
le code fonctionne correctement car le champ ID est l'index principal. Cependant, pour un développement récent dans le projet, je dois rechercher la base de données par un autre champ. Par exemple:
SELECT * FROM table WHERE product_id = '1';
Ce champ n'était pas indexé auparavant; cependant, j'en ai ajouté un, donc mysql indexe maintenant le champ, mais lorsque j'essaie d'exécuter la requête ci-dessus, il s'exécute très lentement. Une requête EXPLAIN révèle qu'il n'y a pas d'index pour le champ product_id lorsque j'en ai déjà ajouté un, et par conséquent la requête prend de 20 à 30 minutes pour renvoyer une seule ligne.
Mes résultats EXPLAIN complets sont:
| id | select_type | table | type | possible_keys| key | key_len | ref | rows | Extra |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
| 1 | SIMPLE | table | ALL | NULL | NULL | NULL | NULL |157211 | Using where |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
Il peut être utile de noter que je viens de jeter un coup d'œil et que le champ ID est stocké en INT alors que le champ PRODUCT_ID est stocké en VARCHAR. Serait-ce la source du problème?
EXPLAIN
résultats complets ? Êtes-vous certain que c'est qu'il n'y a pas d' index? Ou est-ce que l'index est là, mais MySQL a choisi de ne pas l'utiliser?