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

Bases de données Delphi Discussion :

accélérer execution des requetes


Sujet :

Bases de données Delphi

  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut accélérer execution des requetes
    bonjour à tous et bonne année,
    je suis en train de développer une application pour gérer les notes de mes élèves tout marche à merveille sauf un petit soucis :
    j'ai 20 requetes (je les utilise pour calculer les moyennes,pour les statistiques...),mais quand je les actives,elles prennent du temps à s'activer.
    y-a-t-il un moyen d'accélérer execution de ces requetes?

    cordialement

  2. #2
    Membre actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Points : 206
    Points
    206
    Par défaut
    Citation Envoyé par NABIL74 Voir le message
    bonjour à tous et bonne année,
    je suis en train de développer une application pour gérer les notes de mes élèves tout marche à merveille sauf un petit soucis :
    j'ai 20 requetes (je les utilise pour calculer les moyennes,pour les statistiques...),mais quand je les actives,elles prennent du temps à s'activer.
    y-a-t-il un moyen d'accélérer execution de ces requetes?

    cordialement
    Bonne Année,
    tu n'a pas préciser avec quel SGBD tu a developpé la BD, avec quel language tu programme. Encore tu peut nous donner des exemples de requêtes pour savoir si elles sont optimisés ou non,
    malgré que je pense qu'une BD pour la gestion de notes ne necessite pas un travail d'optimisation car elle est petite en terme d'enregistrement et de structure.

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    salut,
    je développe sous Délphi 7.
    j'ai 2 tables en Paradox 7,la 1ère c'est le table "Classes"(table maitre) et la 2ème c'est la table "Notes"(table détail).les calcules se font bien sûr sur la table "Notes".
    Les requêtes de cette BD pour la gestion de notes ne necessitent pas un travail d'optimisation car elles calculent les moyennes des élèves(AVG),le nombre d'élèves qui ont plus de 10,moins de 10,...

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut et bonne année,

    Le mieux serait :
    - 1) de placer dans ton application des instructions de chronométrage pour identifier les blocs de code qui prennent le plus de temps à s'exécuter
    - 2) puis de publier ici les blocs de code en question.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  5. #5
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    Salut et bonne année,

    Le mieux serait :
    - 1) de placer dans ton application des instructions de chronométrage pour identifier les blocs de code qui prennent le plus de temps à s'exécuter
    - 2) puis de publier ici les blocs de code en question.

    A+

    bonjour Gilbert Geyer et bonne année,

    excuse-moi,mais ce n'est pas claire pour moi.
    "1) de placer dans ton application des instructions de chronométrage pour identifier les blocs de code qui prennent le plus de temps à s'exécuter".

    je n'ai pas bien saisi :est-ce que tu veux dire que je dois activer les requêtes
    une par une avec un interval de quelques secondes(à l'aide d'un Timer)?
    Dans mon application,je connais les requêtes(de calcul) qui prennent du temps à s'éxecuter.
    merci encore.

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Re-Bonjour,

    1)
    Dans mon application,je connais les requêtes(de calcul) qui prennent du temps à s'éxecuter.
    ... ben dans ce cas n'hésites pas à poster ici leur code sinon personne ne pourra te filer un coup de main.

    2)
    je n'ai pas bien saisi :est-ce que tu veux dire que je dois activer les requêtes une par une avec un interval de quelques secondes(à l'aide d'un Timer)?
    ... non, s'il avait fallu chronométrer on aurait simplement fait comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var Start : DWord;
    begin      Start:=GetTickCount;
               .....
               Ici le Bloc d''instructions dont on veut connaître la durée d''exéc.
               .... 
               memo1.lines.add('mis : '+intToStr(GetTickCount-Start)+' millisecondes');
    end;
    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  7. #7
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    resalut,

    -voici les code de la 1ère requête ("1M"=moyenne du 1er trimestre,
    ("2M"=moyenne du 2è trimestre,("3M"=moyenne du 3è trimestre):

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select   Min(Notes."1M") as Min1trim,Min(Notes."2M") as Min2trim,Min(Notes."3M") as Min3trim,
    Max(Notes."1M") as Max1trim,Max(Notes."2M") as Max2trim,Max(Notes."3M") as Max3trim
    from Notes
    Where num_classe=:num_classe


    -voici les code de la 2è requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select Count(Notes."1M") as NombreElevesplus10
    from Notes
    where (Notes."1M") >10 and num_classe=num_classe


    -voici les code de la 3è requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select  num_classe, Classe,Avg(Notes."1M") as Moy1trim, Avg(Notes."2M") as Moy2trim,Avg(Notes."3M") as Moy3trim,Min(Notes."1M") as Min1trim,Min(Notes."2M") as Min2trim , Min(Notes."3M") as Min3trim,Max(Notes."1M") as Max1trim, Max(Notes."2M") as Max2trim, Max(Notes."3M") as Max3trim,Min(Notes."M_an") as MinMoyAn,Max(Notes."M_an") as MaxMoyAn
    from Notes,Classes
    Where num_classe=:num_classe
    Group by Classe ,num_classe


    -voici les code de la 4è requête:pour les statistiques par classe
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Select num_classe, '<10' as Moins10 , count( * ) as Nombre_délèves
    from Notes
    where NOTES."1M" < 10 and num_classe=num_classe
    Group By num_classe
    UNION 
    select  num_classe, 'Entre 10 et 15' as Entre10et15, count( * )
    from Notes
    where  NOTES."1M" >= 10 and  NOTES."1M" < 15 and num_classe=num_classe
    Group By num_classe
    UNION 
    select  num_classe,  '>15' as Elevesplus15, count( * )
    from Notes
    where NOTES."1M" >= 15 and num_classe=num_classe
    Group By num_classe
    ---------------------------------------------------------
    pour la 4è requête,il y en 3 autres(une pour le 2è trimestre,une pour le 3è trimestre et une autre pour l'année).

    merci d'avance

  8. #8
    Membre actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Points : 206
    Points
    206
    Par défaut
    Citation Envoyé par NABIL74 Voir le message
    resalut,
    -voici les code de la 2è requête:
    Select Count(Notes."1M") as NombreElevesplus10
    from Notes
    where (Notes."1M") >10 and num_classe=num_classe
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    where (Notes."1M") >10 and num_classe=num_classe
    jointure inutile, càd :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    where (Notes."1M") >10

  9. #9
    Membre actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Points : 206
    Points
    206
    Par défaut
    Citation Envoyé par NABIL74 Voir le message
    resalut,
    -voici les code de la 3è requête:
    Select num_classe, Classe,Avg(Notes."1M") as Moy1trim, Avg(Notes."2M") as Moy2trim,Avg(Notes."3M") as Moy3trim,Min(Notes."1M") as Min1trim,Min(Notes."2M") as Min2trim , Min(Notes."3M") as Min3trim,Max(Notes."1M") as Max1trim, Max(Notes."2M") as Max2trim, Max(Notes."3M") as Max3trim,Min(Notes."M_an") as MinMoyAn,Max(Notes."M_an") as MaxMoyAn
    from Notes,Classes
    Where num_classe=:num_classe
    Group by Classe ,num_classe
    premièrement : deuxièment:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Where num_classe=:num_classe
    est faux, inutile

    Même remarque sur le jointure inutile pour les requêtes qui restent

  10. #10
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Citation Envoyé par hazamor Voir le message
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    where (Notes."1M") >10 and num_classe=num_classe
    jointure inutile, càd :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    where (Notes."1M") >10
    WHERE (Notes."1M") >10 AND num_classe=num_classe
    ma jointure est très utile car comme je l'ai dis j'ai 2 tables:la table"Classes"
    qui est une table Maître et la table "Notes" qui est une table détail.elles
    sont liées par le champ "num_classe" .je veux connaître le nombre des élèves qui ont eu 'plus de 10',donc on peut pas supprimer ce code.
    et pour :
    Where num_classe=:num_classe
    j'ai fait une petite faute de frappe(on efface les ":"
    Where num_classe=num_classe

  11. #11
    Membre actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Points : 206
    Points
    206
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select Count(Notes."1M") as NombreElevesplus10
    from Notes
    where (Notes."1M") >10 and num_classe=num_classe

    Combien de table dans cette requete? 1 seul


    et pour ":nom_classe" :
    Si ta reequete est pour toutes les classe, Alors effacer ":nom_classe"
    Sinon si elle est pour une seule classe, Alors tu le garde mais tu efface la clause Group By

  12. #12
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    bonsoir hazamor ,
    je t'explique:j'ai 2 tables la table maitre "Classes" est liée à la table détail "Notes".elles sont liéées par le champ "num_classe".
    dans la table "Notes",je stoque les notes de tous mes élèves,ç'est à dire dans cette table il y a plusieurs classes.je veux connaître le nombre des élèves(de chaque classe) qui ont eu plus de 10.donc je ne peux pas effacer comme tu le dis "num_classe=num_classe"sinon la requête va s'exercer sur tous les élèves de toutes les classes.
    cordialement

Discussions similaires

  1. precision sur execution des requetes
    Par kervoaz dans le forum Oracle
    Réponses: 6
    Dernier message: 27/09/2007, 14h44
  2. excel+mysql : executé des requetes avec des paramètres
    Par overider dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/09/2007, 21h03
  3. executer des requetes de selection sur access à partie de VBA
    Par benpinta dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/08/2007, 14h04
  4. Réponses: 26
    Dernier message: 23/06/2006, 15h45
  5. [VB6]exécution des requétes sql
    Par nabil dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 02/06/2006, 07h24

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