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 éclairé
    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
    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
    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"
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    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
    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
    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.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé
    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
    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
    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 ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre éclairé
    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
    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
    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 ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre éclairé
    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
    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
    Par défaut
    Donc c'est bien ce que je dis depuis le début : ton code actuel sort les 30000 lignes ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre éclairé
    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
    Par défaut
    Oui, tu a raison, je vais tester avec 2 requètes.

  12. #12
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    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 814
    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 ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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