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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 91
    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 éprouvé 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 : 43
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2003
    Messages : 154
    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
    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 confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 91
    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 expérimenté

    Inscrit en
    Mai 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 162
    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 éprouvé 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 : 43
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2003
    Messages : 154
    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 confirmé 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
    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 confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

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

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 91
    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 confirmé 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
    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 confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 91
    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 confirmé 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

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 91
    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
    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 confirmé 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
    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 confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 91
    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 confirmé 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
    Par défaut
    Que dit explain ?
    Quel est le schema final des tables ?

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 91
    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 confirmé 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
    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 confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 91
    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, 17h11
  2. Réponses: 4
    Dernier message: 12/06/2008, 14h49
  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, 18h40
  4. [Tableaux] PB liens apres affichage page par page
    Par x2thez dans le forum Langage
    Réponses: 16
    Dernier message: 15/03/2006, 17h58
  5. optimisation de temps de traitement xml/xslt
    Par Erwy dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/05/2004, 17h08

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