IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Optimisation requète MYSQL


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 684
    Points : 153
    Points
    153
    Par défaut Optimisation requète MYSQL
    Bonsoir à tous,

    Ma requète fonctionne, mais elle est très, très, très lente !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?PHP
    // Connexion à la base de données
    $sql = mysql_connect('sql7','bonbon','azerty')or die("Impossible de se connecter : " . mysql_error());
    mysql_select_db('bonbon?toto3',$sql) or die('Could not select database.');
    $Resultat = mysql_query('SELECT che, date, hipo, temps_g FROM recup_t ORDER BY che, date DESC');
     
    echo "<CENTER>";
    echo '<p align="center"><u><b><font size="5" color="#003300">Liste des Chevaux</font></b></u></p>';
    echo '<div class="aff1" style="height:300px; width:520px; overflow:auto; font-family: Times New Roman; font-size: 10px;">';
    echo '</CENTER>';
    echo '<table border="3" bordercolor="#003300" style="border-collapse:collapse; font-family:Times New Roman; font-size:10px;">';
    while ($row=mysql_fetch_array($Resultat)) 
    	{
    	 echo "<tr>";
    	 echo "<td>".trim($row['che'])."</td>";
     	 echo "<td>".changedateusfr($row['date'])."</td>";
     	 echo "<td>".$row['hipo']."</td>";
     	 echo "<td>".$row['temps_g']."</td>";
    	 echo "</tr>";
    	}
    echo '</table>';
    echo '</div>';
    ?>
    Cette requète affiche le nom des chevaux ayant participé a une course pendant 1 an classé alphabétiquement
    + la date décroissante
    + l'hipodromme
    + son chrono

    La base comporte environ 30.000 lignes, sachant que le mème cheval ne courre pas forcément toutes les courses

    La requète prends environ 80 secondes pour s'afficher.

    Ma demande, c'est d'optimiser au maximum le temps de réponse.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu affiches les 30000 lignes sur une meme page ?

    au passage : tu n'as pas besoin d'une fonction PHPpour convertir ton format de date, mysql sait le faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT date_format('champ_date','%d/%m/%Y')
     
    il est egalement deconseillé de nommer des colonnes "date"

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 684
    Points : 153
    Points
    153
    Par défaut
    Bonsoir sabotage,

    Non, je n'affiche pas les 30.000 lignes, c'est le nombres de lignes de la base de données.

    Le résultat de la requète, ne devrais afficher que 200 ou 300 lignes maximum.

    Pour le nom du champ date, tu a raison, cela peut éventuellement faire conflit avec une variable système.

    Ma fonction : changedateusfr, corresponds a (%d/%m/%Y'), mais je pourais la shunter.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le résultat de la requète, ne devrais afficher que 200 ou 300 lignes maximum.
    Je ne vois pas comment s'exprime cette limite dans ton code.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 684
    Points : 153
    Points
    153
    Par défaut
    Simplement qu'un cheval ne courre pas toutes les courses.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je ne comprends pas bien ; quand tu dis "La base comporte environ 30.000 lignes" tu parles de ta table recup_t ou d'autre chose ?
    Si tu parles d'autre chose, combien de lignes retourne ta requête ?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 684
    Points : 153
    Points
    153
    Par défaut
    Comme je l'ai dit plus haut, sur une année, 30.000 chevaux ont courru,
    le mème cheval lui n'aura courru en gros que 200 à 300 fois voir moins.

    Ma date est enregistrée au firmat Américain dans la base, c'est pourquoi je dois la transformer au format Français.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Et la notion de ne considérer "qu'un seul cheval" apparait ou dans ton code ?

    Ma date est enregistrée au firmat Américain dans la base, c'est pourquoi je dois la transformer au format Français.
    Ce n'est pas un vrai champ DATE ?

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 684
    Points : 153
    Points
    153
    Par défaut
    Exact, j'aurais peut être du faire une requète en premier lieu sur le nom du cheval.

    Et ensuite une autre requête pour les courses ou il a couru.

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Donc c'est bien ce que je dis depuis le début : ton code actuel sort les 30000 lignes ?

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 684
    Points : 153
    Points
    153
    Par défaut
    Oui, tu a raison, je vais tester avec 2 requètes.

  12. #12
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Ta requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT che, date, hipo, temps_g 
    FROM recup_t 
    ORDER BY che, date DESC

    Je crois comprendre à cette requête que tu n'as qu'une table qui stocke le nom du cheval et le nom de l'hippodrome autant de fois qu'ils apparaissent ?

    A moins que recup_t soit une vue, ta base de données n'est pas structurée correctement !

    Les colonnes che et date sont-elles indexées pour optimiser les performances ?

Discussions similaires

  1. [MySQL] Optimisation requête SELECT
    Par GyZmoO dans le forum Requêtes
    Réponses: 3
    Dernier message: 22/10/2009, 17h24
  2. optimisation requête mysql
    Par ionesco dans le forum Requêtes
    Réponses: 1
    Dernier message: 08/10/2009, 12h14
  3. [MySQL] Optimisation requête, affichage lent
    Par Yann39 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 10/10/2008, 11h23
  4. [MySQL] Optimisation de requêtes MySql
    Par oclone dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 11/07/2008, 11h20
  5. Optimiser une requête mysql
    Par Raideman dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/09/2007, 21h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo