Comment puis-je ajouter des indices de tables MySQL?

J'ai une très grande table MySQL avec environ 150 000 lignes de données. Actuellement, lorsque j'essaie de l'exécuter

SELECT * FROM table WHERE id = '1';

le code fonctionne très bien tant que le champ ID est l'index primaire.
Cependant, récemment, pour un développement dans le projet, je recherche la base de données par un autre champ. Par exemple

SELECT * FROM table WHERE product_id = '1';

Ce champ n'a pas été préalablement indexés, cependant, je l'ai ajouté comme un indice, mais lorsque j'essaie d'exécuter la requête ci-dessus, le résultat est très lent. Un EXPLIQUER requête révèle qu'il n'existe pas d'indice pour le product_id champ lorsque je l'ai déjà ajouté un et comme un résultat de la requête prend n'importe où de 20 à 30 minutes pour retourner une seule ligne.

Mon plein EXPLIQUER les résultats sont les suivants:

| 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 pourrait être utile de noter que je viens de prendre un coup d'oeil et le champ ID est stocké en tant que INT alors que le PRODUCT_ID champ est stocké comme VARCHAR. Cela pourrait-il être la source du problème?

  • Pouvez-vous publier EXPLAIN résultats? Êtes-vous certain, c'est qu'il y a n index? Ou est l'indice de là, mais MySQL est le choix de ne pas l'utiliser?
  • Une grande table serait de 150 000 000 dossiers. Une très grande table a 15,000,000,000 enregistrements. Une table de taille moyenne est de 150 000. Pour référence future.
  • Sachez que " OU " peut faire MySql de ne pas utiliser les index. J'ai eu une requête avec 3 OU de l'. Chaque mached un index, et a couru dans les 15ms, Tous ensemble, pris entre 25sec et le délai d'expiration. J'ai donc fait 3 requêtes et de l'UNION ed ensemble, il a également pris 15ms sur 500.000 lignes.
InformationsquelleAutor Michael | 2010-06-09