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 :

Optimiser le temps de traitement d'une simple requête qui retourne 800 000 lignes.


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2007
    Messages : 197
    Par défaut Optimiser le temps de traitement d'une simple requête qui retourne 800 000 lignes.
    Bonjour à tous,

    Je voudrais accélerer l'affichage de ma requête qui est toute simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $rq_code_grp=mysql_query("select code_groupe, client from liste_grp");
    Voila comment je l'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // on affiche le resultat dans la zone de selection multiple 
    while ($uneligne=mysql_fetch_array($rq_code_grp)) 
    {
    echo "<option value=".$uneligne['code_groupe'].">".$uneligne['code_groupe']." <b>|</b> ".$uneligne['client']."</option>";
    }
    Il y a t-il un moyen d'afficher quasi instantanement les 800 000 lignes ?

    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Tu veux mettre 800 000 options dans ton champ select ? Les utilisateurs seront sûrement ravis

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 67
    Par défaut
    C'est vrai que dans ce cas-là, un champ texte avec auto-completion serait une bien meilleure idée.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2007
    Messages : 197
    Par défaut
    En faite je desire faire un select multiple et balancer les valeurs dans un autre select multiple.

    Mais qu'entend tu par "un champ texte avec auto-completion " ?

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Citation Envoyé par kamnouz Voir le message
    Mais qu'entend tu par "un champ texte avec auto-completion " ?
    Ben comme google...qui affiche des propositions au fur et à mesure que tu tapes, mais ça ne correspond peut être pas à ton besoin.

    A mon avis tu te trompe de table à interroger.
    Intéroge la table qui contient uniquement les code_groupe, pour avoir l'exaustivité des codes.
    N'utilise liste_grp que pour récupérer les code_groupe d'un client précis.

    Je t'assure un champ select multiple avec 800 000 possibilités n'est pas utilisable, sinon, en l'état, ta requête n'est pas optimisable.

  6. #6
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    c'est presque impossible que code ton code php ne dépasse pas les 30s de génération...
    et là même si tu génères la page le temps de génération coté navigateur va être une horreur...

    y a pas que ton pauvre select sur la page hein?

    donc tu peux:
    • si tu comptes contraindre ton select alors tu peux le faire en choisissant une valeur de contrainte par défaut et bien sur limiter le nombre de propositions renvoyées (10 à 20 max)
    • abandonner le select et passer à un affichage par page de tes résultats pour scinder tes 800000 lignes
    • utiliser l'auto-complétion style google comme le dit skuatamad, en utilisant ajax pour envoyer ce que tu saisis à un script qui génère une liste limitée de suggestions (10 entrées sinon ça devient n'importe quoi pour l'utilisateur)

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par kamnouz Voir le message
    En faite je desire faire un select multiple et balancer les valeurs dans un autre select multiple.
    Mets-toi un instant à la place de l'utilisateur et demande-toi si tu aimerais dérouler une liste de 800 000 lignes pour trouver le ou les quelques éléments que tu veux sélectionner !

    Mais qu'entend tu par "un champ texte avec auto-completion " ?
    Un champ de formulaire dans lequel l'utilisateur commence à saisir du texte et qui affiche les possibilités en affinant la liste au fur et à mesure de la saisie.

    Par exemple, pour un tel champ permettant de sélectionner un nom de personne, l'utilisateur commence à saisir 'D' et le système fait une requête sur la table des personnes avec le nom commençant par D. L'utilisateur continue sa saisie 'DU' et le système commence à restreindre en proposant par exemple 'DUPOND, DUPONT, DURAN, DURAND'. L'utilisateur continue en saisissant 'DUR' et le système ne propose plus que 'DURAN' et 'DURAND'...

    Il existe ce genre d'outil dans les bibliothèques Javascript telles que JQuery. On peut paramétrer le nombre de caractères saisis nécessaires pour commencer à requêter la table. Avec 800 000 lignes, il vaut mieux avoir au moins les 3 premiers caractères pour restreindre le nombre de possibilités à afficher et donc accélérer l'affichage.

    Mais tu dis que tu désires "faire un select multiple et balancer les valeurs dans un autre select multiple". Cela veut-il dire que, d'après ta requête, l'utilisateur va d'abord sélectionner les groupes puis les clients des groupes sélectionnés ?
    Si oui, alors fais deux requêtes, une pour chaque liste, en te basant pour la seconde sur le choix opéré par l'utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE code_groupe IN (...)
    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. Réponses: 24
    Dernier message: 17/05/2010, 17h54
  2. optimiser le temp du traitement d'une boucle
    Par riad_09 dans le forum Développement
    Réponses: 1
    Dernier message: 05/11/2009, 08h38
  3. Optimisation du temps de traitement
    Par djuddju dans le forum Oracle
    Réponses: 4
    Dernier message: 20/04/2006, 21h16
  4. Réponses: 9
    Dernier message: 20/06/2005, 12h17
  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