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

Langage PHP Discussion :

[Tableaux] Temps de traitement ... affichage de page


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 91
    Points : 71
    Points
    71
    Par défaut [Tableaux] Temps de traitement ... affichage de page
    Bonjour a tous !

    je suis entrain de faire une partie back office pour un site web.
    Cette page consiste a afficher l'ensemble des inscrits a un congres (environ 1000) avec leurs informations.

    Le probleme c'est que le temps de traitement est vraiment tres lent ...
    La page met 15 secondes pour s'afficher ...

    Est ce que qq1 aurait une idée de quoi faire ?

    Merci d'avance

  2. #2
    Membre habitué Avatar de cynferdd
    Profil pro
    Analyste Développeur .Net, PHP, SQL Server
    Inscrit en
    Avril 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Développeur .Net, PHP, SQL Server

    Informations forums :
    Inscription : Avril 2003
    Messages : 154
    Points : 190
    Points
    190
    Par défaut
    il y a peut être possibilité d'améliorer les performances de ta requête SQL. A mon avis c'est surtout de ce côté là qu'il faudrait voir. Par contre, sans code ou autres infos, ça risque d'être difficile de t'aider.

  3. #3
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    Difficile de répondre dans le flou comme ca mais bon, tentons :
    Optimise tes requêtes
    Vérifie qu'il y ait des index aux bons endroits (sur les données qui servent dans les WHERE)
    Pagine tes résultats
    Achete une autre machine ^^

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 91
    Points : 71
    Points
    71
    Par défaut
    Alors voila la requete ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		if($_GET["class"]==1)
    		{
    		$sess=$_SESSION['auth'];
    		$requete = "SELECT * FROM inscrits,hotels,staff where inscrits.fkey_hotels=hotels.id_hotel and staff.id_staff=inscrits.suivi order by nom";
    		$result = mysql_query($requete);
    		}
    Que veux tu dire par pagination ???

    Merci

  5. #5
    Membre actif

    Inscrit en
    Mai 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 162
    Points : 264
    Points
    264
    Par défaut
    Si tu requête sur trois tables en même temps il ne faut pas t'étonner d'avoir un temps de réponse très important.

    Paginer c'est "découper" le résultat de ta requête en plusieures pages...

  6. #6
    Membre habitué Avatar de cynferdd
    Profil pro
    Analyste Développeur .Net, PHP, SQL Server
    Inscrit en
    Avril 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Développeur .Net, PHP, SQL Server

    Informations forums :
    Inscription : Avril 2003
    Messages : 154
    Points : 190
    Points
    190
    Par défaut
    je pense qu'il voulait dire de ne pas afficher tous les résultats d'un coup mais, par exemple, 15 par 15.

  7. #7
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM inscrits,hotels,staff.............
    hum, il serait mieux de ne rapporter que les champs utils, à moins qu'ils ne le soient tous...

    Fais un EXPLAIN de ta requête et donne nous ce que ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXPLAIN SELECT * FROM inscrits,hotels,staff where inscrits.fkey_hotels=hotels.id_hotel and staff.id_staff=inscrits.suivi order by nom
    Tu peux le faire sous phpMyAdmin

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 91
    Points : 71
    Points
    71
    Par défaut
    Oui je comprend, mais je n'ais pas le choix ...

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 91
    Points : 71
    Points
    71
    Par défaut
    alors resultat du explain :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    table  type  possible_keys  key  key_len  ref  rows  Extra  
    hotels ALL PRIMARY NULL NULL NULL 4 Using temporary; Using filesort 
    inscrits ALL NULL NULL NULL NULL 682 where used 
    staff eq_ref PRIMARY PRIMARY 4 inscrits.suivi 1 where used

  10. #10
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    inscrits ALL NULL NULL NULL NULL 682 where used
    C'est pas bon ça. Dans la doc ils disent même que c'est "very bad"
    Il faut que tu index ta table sur les colonnes de jointures.
    Et que tu fasses aussi un ANALYZE TABLE après, et régulièrement.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 91
    Points : 71
    Points
    71
    Par défaut
    Dans la doc ils disent même que c'est "very bad"
    Je la trouve ou cette "doc" ?

    Merci bcp en tout cas

  12. #12
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 91
    Points : 71
    Points
    71
    Par défaut
    désolé mais je ne comprend pas ce que tu veux dire par
    il faut que tu indexes ta table sur tes colonnes de jointure
    ...

    Sorry

  14. #14
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    Voire même en francais ^^

    http://dev.mysql.com/doc/refman/5.0/fr/explain.html

    Mais attention, parfois les full scan sont inévitables puisque tu parcoures vraiment toute la table (si tu as vraiment besoin de tous les users).
    Par contre dans ton exemple, tu as quand même des contraintes donc ca ne devrait pas être le cas.
    Il y a fort à parier que les champs fkey_hotels et suivi gagnerait à être indexé. (evidemment je suppose que les id_* sont des clés primaires, n'est ce pas ?)

    Ah oui autre chose : "staff.id_staff=inscrits.suivi" C'est bien le même type de champ ? Il est couteux de comparer des éléments de différents type.

    Après avoir fait ces modifications, fait un ANALYZE TABLE et tu devrais constater un gain.

  15. #15
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par hugo123
    Voire même en francais ^^
    Malheureusement sans commentaires... Qui sont souvent inutiles mais parfois intéressants.

    Citation Envoyé par mathieu77186
    désolé mais je ne comprend pas ce que tu veux dire
    hugo123 t'a répondu. Dans phpMyAdmin, tu regardes la structure de chaque table. sur (presque) chaque champ tu peux poser un index icone en forme de i suivant les versions de PmyA...
    Un index permettra à MySQL de retrouver plus facilement les données sans avoir à parcourir toute la table.

    Si tu y arrives pas exporte le schéma de la table et colle le nous ici

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 91
    Points : 71
    Points
    71
    Par défaut
    J'ai indexé les 2 champs ... puis ANALYZED et j'ai gagné quelques secondes

    C'est encore un peu long ...

    Y'a t'il d'autres moyens ?

  17. #17
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Que dit explain ?
    Quel est le schema final des tables ?

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 91
    Points : 71
    Points
    71
    Par défaut
    Alors le nouveau explain donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    table  type  possible_keys  key  key_len  ref  rows  Extra  
    hotels ALL PRIMARY NULL NULL NULL 4 Using temporary; Using filesort 
    inscrits ALL fkey_hotels,suivi NULL NULL NULL 682 where used 
    staff eq_ref PRIMARY PRIMARY 4 inscrits.suivi 1
    Schéma des tables = le code sql ?

  19. #19
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    schéma le code qui crée les tables (CREATE TABLE machintruc....) => sous PHPMyAdmin tu fais exporter et tu as ton schéma, en oubliant pas la def des indexes

    Sinon je trouve ton explain pas terrible.

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 91
    Points : 71
    Points
    71
    Par défaut
    c'est deja mieu que tout a lheure.
    Pourtant le raisonnement est bon

    J'ai 3 tables :
    Inscrits (clé primaire : id_inscrit / clé etrangere : id_hotel / suivi)
    Hotel (clé primaire : id_hotel)
    Staff (clé primaire : id_staff)

    j'ai besoin d'avoir les noms d'hotel et les noms des staff donc je fais bien une jointure.
    inscrits.id_hotel=hotel.id_hotel AND inscrits.suivi=staff.id_staff

    C'est un peu galere quand meme

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/03/2011, 16h11
  2. Réponses: 4
    Dernier message: 12/06/2008, 13h49
  3. [Tableaux] Délai de traitement d'une page pas assez long
    Par Alexlesilex dans le forum Langage
    Réponses: 14
    Dernier message: 15/05/2006, 17h40
  4. [Tableaux] PB liens apres affichage page par page
    Par x2thez dans le forum Langage
    Réponses: 16
    Dernier message: 15/03/2006, 16h58
  5. optimisation de temps de traitement xml/xslt
    Par Erwy dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/05/2004, 16h08

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