Une notion que certains développeurs oublient parfois et une erreur de débutant que je vois régulièrement dans des scripts open source. Je vais prendre l’exemple (simplié a l’extrème) d’un blog avec des articles et des categories. J’ai une table avec un champ texte qui contient le texte de mon article, un identifiant (clé primaire) de l’article et une catégorie pour classer l’article (sous forme d’entier).
La création de la table donne ca :
- CREATE TABLE `test_index` (`id` INT NOT NULL ,`texte` TEXT NOT NULL ,`categorie` INT NOT NULL ,PRIMARY KEY ( `id` )) ENGINE = MYISAM ;
Tout va bien la plupart du temps mais quand la base commence a prendre du volume, certaines pages deviennent lentes. Dans notre cas, il s’agit de la page par categorie, c’est à dire la page qui regroupe tous les articles d’une même categorie.
La raison de cette lenteur est simple, MySQL est obligé de parcourir toute la table pour extraire les articles de la catégorie désirée.
Il faut donc ajouter un index sur le champ categorie pour accélérer les requetes du type
- SELECT * FROM test_index WHERE categorie='1';
Comment ajouter un index avec une commande MySQL :
- ALTER TABLE `test_index` ADD INDEX ( `categorie` )
Comment ajouter un index avec PHPMyAdmin :
1. Je choisis ma table
2. je vais dans le menu Structure

3. Je clique sur créer 1 index :

4. Je choisis “categorie” comme champ sur lequel je crée l’index.

5. Je clique sur Save pour enregistrer

6. Je vois la requete de création de l’index

7. mon index est affiché parmis la liste des index

Toutes mes requètes possibles sont optimisés :
- SELECT * FROM test_index WHERE id='2';
- SELECT * FROM test_index WHERE categorie='6';
Dernière remarque : il n’est jamais trop tard pour créer un index ! la création sera peut-être un peu plus longue que sur une table vide mais ce n’est pas interdit
“Il n’est jamais trop tard pour bien faire”
