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 :

question d'optimisation[group by/ order by/ vue] [Oracle]


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Points : 238
    Points
    238
    Par défaut question d'optimisation[group by/ order by/ vue]
    Bonjour à tous,

    voic dejà le contexte:

    Sur l'une de mes pages php, je fais une requete avec un GROUP BY sur environ 10-15 champs, tous ceux qui me renvoient plus de 2 lignes, sont ensuite affichés sur un formulaire via une boucle foreach.(chaque ligne = une ligne de tableau par exemple)

    Par soucis d'opitmisation, et vu que mon formulaire met 5-10s à se charger pour l'instant, je me demandais quelle serait la solution la mieux à savoir:

    - conserver ce group by + having > 2
    - remplacer le group by par un order by sur les mêmes champs, on boucle sur chaque ligne, tant que la ligne courante est égale à la ligne précédente ça reste le meme element du tableau(<TR>) sinon , nouveau <TR>.
    - soit, créer une vue contenant le group by initial, et appeler cette vue dans mon php.



    En esperant avoir été assez clair, merci
    L'intelligence c'est comme la confiture, moins tu en as , plus tu l'étales...

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 704
    Points
    704
    Par défaut
    Bonjour,

    Ta table contient combien d'entrée ? Parce-que s'il y en a que 10-15, je ne pense pas que ce soit la requête sql qui pose problème, du moins pas le "GROUP BY"... Mais si tu mets ta requête, on peut éventuellement être plus précis.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Points : 238
    Points
    238
    Par défaut
    Hello,
    voici ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select factm_exploite_par, fact_adm_os, sauvegarde_donnees, secours_inst_sys_remunere, service_dispo, service_admin, sensi_serv, rs.projet_sous_controle, rs.plage_service_pco, rs.dispo_renforcee, rs.taux_dispo_renforcee, co.nom_const, pco.nom_pco, rs.ADMIN_DELEGUEE, count(*) 
    from REF_SERVEUR rs,REF_MACHINE rm,REF_MODELE mo,REF_CONSTRUCTEUR co,REF_PCO pco 
    where (rs.pk_machine = rm.pk_machine) 
    AND (rm.pk_modele = mo.pk_modele) 
    AND (mo.pk_const = co.pk_const) 
    AND (rs.pk_nom_pco = pco.pk_pco (+)) 
    AND (rs.statut = 'ACTIF') 
    AND (infog_classe = 'SERVEUR') 
    AND (grp_instance_sys = 1 ) 
    group by factm_exploite_par, fact_adm_os, sauvegarde_donnees, secours_inst_sys_remunere, service_dispo, service_admin, sensi_serv, rs.projet_sous_controle, rs.plage_service_pco, rs.dispo_renforcee, rs.taux_dispo_renforcee, co.nom_const, pco.nom_pco, rs.ADMIN_DELEGUEE 
    HAVING count(*) > 2

    Sachant que par exemple, la table serveur comporte 19000 lignes, la table machine 12000 :p
    L'intelligence c'est comme la confiture, moins tu en as , plus tu l'étales...

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 704
    Points
    704
    Par défaut
    Citation Envoyé par erox44 Voir le message
    Sachant que par exemple, la table serveur comporte 19000 lignes, la table machine 12000 :p
    Dans ce cas deux conseils :
    1. Explose ta requête en plusieurs plusieurs requêtes. D'expérience, il vaut mieux des boucles en php avec de petites requêtes, qu'une seule grosse requête.
    2. Utilise des JOIN

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Question sur les GROUP BY
    Par Coladin dans le forum Langage SQL
    Réponses: 5
    Dernier message: 21/04/2006, 14h25
  2. [Optimisation] Requetes avec agregats et vue
    Par rad_hass dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 14/01/2006, 13h39
  3. question conceptuelle optimisation.
    Par mandrake_of_mandregas dans le forum Access
    Réponses: 1
    Dernier message: 29/12/2005, 10h07
  4. :?: question d'optimisation!
    Par Stopher dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 21/06/2004, 17h15

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