Optimisations mysql sur les requêtes SELECT: index
Salut à tous,
j'ai developpé il y a quelques temps un forum php pour mon site Internet. Je dois dire que lorsque j'ai commencé à developper mon script, j'étais vraiment débutant en php et encore plus à tout ce qui touche aux notions de bases de données. Bref, mon site accueille aujourd'hui plus de 5000 visiteurs/jour et j'ai pu constater que mon forum, qui était jusqu'à maintenant plutôt rapide, commencait à sérieusement ralentir (surcharge cpu du serveur) depuis que le nb de visiteurs avait augmenté, et surtout que la bdd avait grossi (21000 messages postés et 3500 membres inscrits)
J'ai lu quelques articles traitant des optimisations sql a effectuer lors des requetes SELECT (une page ralentit particulièrement, celle permettant d'afficher le contenu d'un forum et qui comporte une requete sélectionnant les 40 derniers derniers sujets) et il semblerait qu'indexer des colonnes sur lesquelles portent des conditions WHERE puisse considérablement accélérer le temps d'execution de la requête.
Dans mon cas, ma requête ressemble à ca:
Code:
SELECT id,rep,vues,postdate,pseudo,message,titre,cat,lpost,statut from forum WHERE(cat='$idcat' AND rep='0' AND statut<>1) ORDER BY lpost DESC LIMIT 0,$nbtopics
Mes conditions de sélection d'un enregistrement se basent donc sur 3 conditions sur les champs cat, rep et statut.
Mes questions sont: Faut il ajouter un index sur ces 3 champs? Si oui, le fait que ma base de données ne soit pas vide ne pose t'il pas un problème? (J'ai lu qu'il était possible de créer des index après avoir défini ses tables et après y avoir inséré des enregistrements) Quelles tailles donner aux clefs?
Merci d'avance