Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 31/01/2010, 21h33   #1 (permalink)
Membre expérimenté
 
Date d'inscription: août 2007
Messages: 598
Par défaut Optimisation requète MYSQL

Bonsoir à tous,

Ma requète fonctionne, mais elle est très, très, très lente !!!
Code :
 
<?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.
malabarbe est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 22h26   #2 (permalink)
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 10 021
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 :
SELECT date_format('champ_date','%d/%m/%Y')
 
il est egalement deconseillé de nommer des colonnes "date"
sabotage est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/02/2010, 00h23   #3 (permalink)
Membre expérimenté
 
Date d'inscription: août 2007
Messages: 598
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.
malabarbe est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/02/2010, 08h26   #4 (permalink)
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 10 021
Par défaut

Citation:
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.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/02/2010, 10h52   #5 (permalink)
Membre expérimenté
 
Date d'inscription: août 2007
Messages: 598
Par défaut

Simplement qu'un cheval ne courre pas toutes les courses.
malabarbe est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/02/2010, 10h58   #6 (permalink)
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 10 021
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 ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/02/2010, 11h05   #7 (permalink)
Membre expérimenté
 
Date d'inscription: août 2007
Messages: 598
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.
malabarbe est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/02/2010, 11h16   #8 (permalink)
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 10 021
Par défaut

Et la notion de ne considérer "qu'un seul cheval" apparait ou dans ton code ?

Citation:
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 ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/02/2010, 11h37   #9 (permalink)
Membre expérimenté
 
Date d'inscription: août 2007
Messages: 598
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.
malabarbe est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/02/2010, 11h40   #10 (permalink)
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 10 021
Par défaut

Donc c'est bien ce que je dis depuis le début : ton code actuel sort les 30000 lignes ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/02/2010, 11h42   #11 (permalink)
Membre expérimenté
 
Date d'inscription: août 2007
Messages: 598
Par défaut

Oui, tu a raison, je vais tester avec 2 requètes.
malabarbe est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/02/2010, 09h17   #12 (permalink)
Modérateur
 
Avatar de CinePhil
 
Nom : Philippe Leménager
Date d'inscription: août 2006
Localisation: Toulouse
Âge: 46
Messages: 4 795
Envoyer un message via MSN à CinePhil
Par défaut

Ta requête :
Code SQL :
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.
Futur ingénieur CNAM, ingénieur d'étude à l'École Nationale de Formation Agronomique.

« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ».
(Nicolas Boileau)
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation
NEWS PHPFAQ PHPCours PHPSources PHPLivres PHPScripts PHPOutils PHPComparatifsZend Framework

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 07h08.


Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.