picture picture
juin 1, 2008 MySQL, PHP 3 Commentaires

MySQL : optimiser la requete SELECT (niveau débutant)

quelques trucs extrêmement simples … et pas toujours utilisés, pour aller plus vite au but et éviter de surcharger les ressources de vos serveurs !

– Les colonnes Si vous avez 10 champs dans votre table mais n’en voulez que 2, ne demandez que ces 2 colonnes…
SELECT champ_1, champ_2 From table1 au lieu de SELECT * From table1

– Les lignes Idem, en utilisant WHERE pour enlever les lignes dont on n’a pas besoin
SELECT * from table1 WHERE champ_1 = '5'

Le HAVING a un fonctionnement un peu similaire au WHERE à une différence près : il est exécuté à la fin de la requête, juste avant le transfert. C’est pratique pour supprimer des lignes sans pouvoir le faire avec un WHERE. Par exemple, on à une table avec des lignes de facture (prix de l’article, quantité et identifiant de la facture), on veut le total de chaque facture, mais seulement celles dont le montant total est supérieur à 1000. On ne peut pas déterminer ce montant en traitant chaque ligne individuellement, donc le WHERE ne sera pas utile.
SELECT id_facture, SUM(prix * quantite) AS total_facture FROM lignes_factures GROUP BY id_facture HAVING total_factures = '1000'

– Les tris Autant les faire directement en MySQL si c’est possible
SELECT champ_1, champ_2 From table1 ORDER BY champ_1 ASC

– Le comptage Vous voulez savoir le nombre de lignes qui respectent une condition dans une table. 1ère solution :
SELECT champ_1 FROM table_1 WHERE champ_1 = '5' puis utilisation de mysql_num_rows() pour connaître le nombre de lignes du résultat. Dans ce cas, MySQL va transférer toutes les lignes vers PHP, qui va les mémoriser, juste pour savoir combien il y en a…

2ème solution :
SELECT COUNT(champ_1) AS nb_lignes FROM table_1 WHERE champ_1 = '5' Là, le résultat ne contient qu’1 ligne et 1 colonne. C’est quand même moins volumineux, non ?

(si vous voulez aussi parcourir le résultat, mieux vaut la 1ère méthode puisque vous aurez de toute façon besoin de récupérer toutes les lignes)

– Utilisation du LIMIT Le LIMIT indique que l’on souhaite récupérer seulement une partie du résultat. Par exemple, en ajoutant LIMIT 10,25 à la fin de votre requête MySQL ne transférera que 25 lignes, en commencant à la 10ème.

Pratique, lorsqu’il est combiné avec un tri, lorque l’on veut afficher des données sur plusieurs pages, pour déterminer un « top n », récupérer les 10 données les plus vieilles/récentes…

Il est également utile d’utiliser LIMIT 0,1 lorsqu’on est sûr que la requête ne retournera qu’une seule ligne. Ceci évitera à MySQL de continuer à chercher après avoir trouvé le seul résultat.

3 Responses to “MySQL : optimiser la requete SELECT (niveau débutant)”

3 Commentaires

  1. webtolosa dit :

    sans doute y a t-il nettement plus en matière d’optimisation, gramme… mais il n’est question ici que des erreurs les plus classiques que l’on trouve sur 80% (je n’ai pas de stats exactes mais je dois plutôt être en dessous !) des scripts SQL.
    Si vous avez d’autres suggestions et partages d’expériences, elle sont les BIENVENUES ! Merci d’avance ;)

  2. lenono dit :

    Bonjour,

    effectivement, il y a toujours mieux, ceci dit, cela fait énormément de bien de se faire faire quelques piqures de rappel : genre le paragraphe sur le comptage…. J’utilise trop de mysql_num_rows, donc je vais rebasculer ca en count rapidement !!!

    Merci :))

    lenono

  3. gramme dit :

    je trouve que vous pouvez faire plus

Commentaire

Name

Mail (ne sera pas publié)

Website

Laisser ces deux champs tels quels :
:D :-) :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: