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 17/08/2011, 19h40   #1
Membre du Club
 
Inscription : janvier 2009
Messages : 45
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2009
Messages : 45
Points : 59
Points : 59
Par défaut Optimisation récupération des résultats

Bonjour,

Voici ce qui m'arrive : j'ai une requête sur deux tables qui ont chacune 14000 entrées.
Je fais une requête qui renvoie environ 6000 résultats, comprenant 4 champs, un INT, deux DOUBLE, et un ENUM.

Le benchmark pour la requête seule est satisfaisant, mais php met un temps fou à récupérer le résultat SQL d"une part, et à faire la sortie à l'affichage d'autre part.

Le benchmark SQL est extrait de phpMyAdmin, et indique 2,9 secondes. Le benchmark PHP indique 15 secondes en tout, requête comprise.

Le résultat sql est bouclé pour ajout dans un tableau avec les fonctions mysql_*, et pour finir, le tout est envoyé avec json_encode().

Connaissez-vous un moyen d'extraire ces résultats plus rapidement à partir du moment où ils sont transmis à PHP ?

Merci pour votre attention.
briegel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 19h42   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
montre ton code
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 19h57   #3
Membre du Club
 
Inscription : janvier 2009
Messages : 45
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2009
Messages : 45
Points : 59
Points : 59
Hey, je l'ai plus sur moi, mais il s'agit d'un bouclage type :

Code :
1
2
3
4
5
6
7
8
9
 
$q=mysql_query("La requête, je m'en souviens pas, mais à priori elle est est suffisamment rapide");
$resp=array();
 
while($d=mysql_fetch_object($q)){
    array_push($resp,array($d->id,$d->lat,$d->lng,$d->theme));
}
 
echo json_encode($resp);
briegel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 20h01   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
fait juste :

Code :
1
2
3
4
5
while ($d = mysql_fetch_assoc($q)) {
    $resp[] = $d
}
 
echo json_encode($resp);
t'as mysqli ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 20h07   #5
Membre du Club
 
Inscription : janvier 2009
Messages : 45
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2009
Messages : 45
Points : 59
Points : 59
Merci,

J'ai fait les tests sur un serveur toute la journée, et j'ai oublié d'emporter les FTP avec moi, je pourrai tester demain première heure.

Concernant mysqli, je pourrai l'avoir, les bases seront sur un serveur à part, configuré que pour les BDD.

C'est plus rapide en mysqli ?
briegel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 20h13   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
c'est surtout plus moderne, mysql_* est une vielle extension, si ton mysqli est compilé avec mysqlnd t'auras accès au fetch_all
donc juste a faire :
Code :
1
2
3
 
$result = mysqli_query('...');
echo json_encode(mysqli_fetch_all($result));
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 19h06   #7
Membre du Club
 
Inscription : janvier 2009
Messages : 45
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2009
Messages : 45
Points : 59
Points : 59
Bon, effectivement, ta solution a accéléré la sortie affichage, mais le temps de sortie des résultats est encore trop élevé, même en augmentant l'allocation mémoire pour le buffer de sortie mysql.

J'ai finalement opté pour une extraction des résultats par tranches successives, avec de multiples appels ajax au script, ce qui donne une expérience utilisateur correcte.

Merci pour tout.
briegel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h04.


 
 
 
 
Partenaires

Hébergement Web