Optimisation d'une requete sql simple dans une table enorme

Bonjour, voila je m’apercoit que dans ma table, j’ai 20 389 754 lignes (20 millions)

une simple requete “select champ1 from ma_table where champ1=“test”;” met 12s a me retourner le resultats alors qu’il y a seulement 420 lignes en retour.

Donc la lenteur viens excusivement du nb de ligne dans ma table.

Qq aurai t’il une solution pour optimiser, soit mysql, soit la table, soit la requete? :@

Merci
Edité le 10/06/2008 à 15:04

essaye truncate table ta_table;

Ca l’optimisera carrément.

Sinon, essaye de nous donner un minimum d’info sur

  1. la table, sa structure, et ses index…
  2. les requêtes que tu es amené à faire dessus tout simplement

Alors le trucate table, j’ai pas trop envi,
sinon, la description de ma table:


+---------------------------------+--------------+------+-----+---------------------+----------------+
| Field                           | Type         | Null | Key | Default             | Extra          |
+---------------------------------+--------------+------+-----+---------------------+----------------+
| idClipAudioTv                   | int(11)      |      | PRI | NULL                | auto_increment |
| idClipAudioTvClipSource         | mediumint(9) | YES  |     | NULL                |                |
| motClipAudioTv                  | varchar(255) |      |     |                     |                |
| dateHeureClipAudioTv            | datetime     |      |     | 0000-00-00 00:00:00 |                |
| tempsMillisecondeMotClipAudioTv | int(11)      | YES  |     | NULL                |                |
| heureminuteClipAudioTv          | datetime     |      |     | 0000-00-00 00:00:00 |                |
| HeureMinuteCreatedClipAudioTv   | datetime     |      |     | 0000-00-00 00:00:00 |                |
| dateCreatedClipAudioTv          | timestamp    | YES  |     | CURRENT_TIMESTAMP   |                |
| nomFichierClipAudioTv           | text         |      |     |                     |                |
| IndexingTimeClipAudioTv         | datetime     |      |     | 0000-00-00 00:00:00 |                |
+---------------------------------+--------------+------+-----+---------------------+----------------+

select count(nomFichierClipAudioTv) as nb from clipaudiotv;
±---------+
| nb |
±---------+
| 20389754 |
±---------+
1 row in set (0.00 sec)

donc ma commande:
select nomFichierClipAudioTv from clipaudiotv where nomFichierClipAudioTv=‘2008_04_09_14_07_30_ITV’;
=> 480 resultats en 12s

Mes requete de selection, meme les plus basic sont super lente !!!

Et tes index?

Je n’ai pas d’index !!!

Ah.

Essaye d’en créer sur les champs que tu utilises pour tes critères de recherche genre dateHeureClipAudioTv & nomFichierClipAudioTv

En effet, j’ai regarder la doc et je vois que justement, ca sert a ca les index, merci de m’avoir lancé sur la piste, je V essayer ca

whattta !!! ok, bon ba on peu dire que c’est efficace… pour une meme requete, je passe de 12s a 0.03s…

INDEX, un mot a retenir

Merci pour l’astuce

… Par contre ça allourdit en conséquence ta base, mais bref.

1°/ je rejoins Sans-Nom concernant les index ! C’est très important
2°/ Ta requête est… pas trop utile : je m’explique : tu fais une requête qui te renvois uniquement la valeur d’un champ… dont tu connais déjà la valeur… si ton but n’est de connaitre uniquement le nombre d’enregistrement qui contiennent cette valeur dans ce champ, alors tu devrais faire :

SELECT count(*) as nb FROM clipaudiotv WHERE nomFichierClipAudioTv='2008_04_09_14_07_30_ITV'

Ainsi, il ne te renverra pas 480 fois le même résultat dans ton fetch…

non, la requete n’etait qu’un exemple, je recupère un autre champs que celui que je connais. C’etait juste pour souligner la lenteur de la requete, meme avec une requete simple !!!

Il s’est avéré que l’ont epure regulièrement la table et on l’optimise car meme avec les index, on a beaucoup de ligne et ca alourdi vraiment la recherche. (on ajoute environ 1 million de ligne par jour) donc ca deviens vite ingerable…

1 million par jour ? Par curiosité c’est quoi comme site ?