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

Requêtes et SQL. Discussion :

Temps d'execution d'une requete


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2012
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 19
    Points : 8
    Points
    8
    Par défaut Temps d'execution d'une requete
    Bonjour à tous, je viens vers vous car j'ai un soucis de temps d'execution d'une requête. J'ai cherché sur internet mais rien de trouvé ..

    Voici ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_PN.PN, T_PN.Ref_MPOption, T_MPOption.[MOD]
    FROM (T_MPOption INNER JOIN T_PN ON T_MPOption.ID_MP = T_PN.Ref_MPOption.Value) INNER JOIN T_MSN ON T_PN.ID_PNs = T_MSN.Ref_PN.Value
    WHERE (((T_MPOption.[MOD])="60182" And (T_MPOption.[MOD])="60247" And (T_MPOption.[MOD])="60241" And (T_MPOption.[MOD])="60242" And (T_MPOption.[MOD])="60244" And (T_MPOption.[MOD])="60243" And (T_MPOption.[MOD])="60248" And (T_MPOption.[MOD])="60249"));
    Au dela de 5 criteres le temps d'execution deviens tres long, le temps dexecution dépasse les 15 min quand sa fait pas planter access .. Les champs ID_MP / ID_PNs sont des clé primaire et le champ MOD est indéxé avec doublons.

    Merci de votre aide.

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 884
    Points : 58 498
    Points
    58 498
    Billets dans le blog
    45
    Par défaut
    bonjour,

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...WHERE  (( ( T_MPOption.[MOD] ) = "60182"
              And ( T_MPOption.[MOD] ) = "60247"
              And ( T_MPOption.[MOD] ) = "60241"
              And ( T_MPOption.[MOD] ) = "60242"
              And ( T_MPOption.[MOD] ) = "60244"
              And ( T_MPOption.[MOD] ) = "60243"
              And ( T_MPOption.[MOD] ) = "60248"
              And ( T_MPOption.[MOD] ) = "60249" ));

    Tu es sûr qu'il ne faudrait pas plutôt des Or à la place des And ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2012
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    Salut f-leb,

    Tout d'abord merci de ta reponse, non c'est bien des And et tout le code n'y est pas car ensuite je dois reprendre l'ensemble de ces champs et faire un mix comme ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     ... WHERE (( Champ1 And Champ2  And Champ3 )  ' premiere ligne
                   Or ( Champ1 And Champ2 ) 
                   Or ( Champ2 And Champ3 ) ...
    
                   Or (Champ1 ));
    Mais avant de faire ceci, j'ai deja testé le temps d'execution de la premiere ligne est au dela de 5 champs sa devient très long ..

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 884
    Points : 58 498
    Points
    58 498
    Billets dans le blog
    45
    Par défaut
    Citation Envoyé par cassof Voir le message
    ... non c'est bien des And ...
    un truc m'échappe...

    Tu m'expliques comment, pour un enregistrement donné, un même champ peut être égal à la fois à "60247", puis à "60247", puis...

    Moi par exemple, mon prénom c'est Fabien
    ForumerChezDvp. Prenom="Fabien"

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ...WHERE  ForumerChezDvp.Prenom="Fabien"
               AND ForumerChezDvp.Prenom="Georges"
    Sélectionnez les forumeurs de chez DVP dont le prénom est à la fois "Fabien" et "Georges"

    ... WHERE (( Champ1 And Champ2 And Champ3 ) ' premiere ligne
    là c'est différent, il ne s'agit pas du même champ...

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2012
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    Desolé si je fait pas bien passer mon problème,

    J'ai trois champ à afficher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT T_PN.PN, T_PN.Ref_MPOption, T_MPOption.[MOD]
    Le champ T_PN.Ref_MPOption est multivalué.

    Ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T_PN.Ref_MPOption = TOTO
    peut contenir plusieur T_MPOption.[MOD]

    Si je ne trouve pas T_PN.Ref_MPOption = TOTO avec toute les T_MPOption.[MOD] de ma premiere ligne SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...WHERE  (( ( T_MPOption.[MOD] ) = "60182"
              And ( T_MPOption.[MOD] ) = "60247"
              And ( T_MPOption.[MOD] ) = "60241"
              And ( T_MPOption.[MOD] ) = "60242"
              And ( T_MPOption.[MOD] ) = "60244"
              And ( T_MPOption.[MOD] ) = "60243"
              And ( T_MPOption.[MOD] ) = "60248"
              And ( T_MPOption.[MOD] ) = "60249" ));
    Alors j'ajoute un Or et test d'autres combinaisons.

    "Sachant que les MOD sont pas saisis à la main" Ici je les rentre a la main simplement pour test.

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 884
    Points : 58 498
    Points
    58 498
    Billets dans le blog
    45
    Par défaut
    Je pense que la solution à ton problème est plus compliquée que cela (ta syntaxe avec And ne pouvant pas marcher) et que l'utilisation du champ multivalué ne va pas faciliter les choses

    petite précision...
    Est-ce qu'il faut retourner les enregistrements comportant exactement les éléments de ta liste ("60182", "60247", "60241","60242", "60244"...) ou ceux comprenant au moins les éléments de la liste ("60182", "60247", "60241","60242", "60244"...) ?

  7. #7
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonsoir,

    D'après ce que je vois dans cet article, la syntaxe que tu utilises ne correspond pas à celle s'appliquant à un champ à plusieurs valeurs.

    A+

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2012
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    @ F-leb : je voudrai retourné ceux qui contiennent exactement les éléments de ma liste ("60182", "60247", "60241","60242", "60244"...) mais je n'ai pas encore trouvé la syntaxe pour le faire. Merci de ton aide


    @LedZeplin :

    Dans l article :

    SELECT tbl_classe.NomClasse, tbl_eleve.Nom, tbl_eleve.Prenom, tbl_classe.Annee
    FROM tbl_classe
    INNER JOIN tbl_eleve
    ON tbl_classe.Eleves.Value = tbl_eleve.ID;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_PN.PN, T_PN.Ref_MPOption
    FROM T_MPOption 
    INNER JOIN T_PN ON T_PN.Ref_MPOption.Value =  T_MPOption.ID_MP;
    J'utilise simplement le champ MOD pour ne pas à avoir appeler l'ID qui reste flou pour un utilisateur.

    J'ai réduit la requête à trois champs, pour simplifier et le résultat reste la même. On parle bien du même paragraphe dans ton article ?

    Merci beaucoup pour votre aide

  9. #9
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    Désolé j'ai mal lu le SQL de ta requête.
    Je n'avais pas vu la jointure sur le champ à valeurs multiples et je croyais que c'était MOD qui avait plusieurs valeurs.

    Pour moi le seul cas où un champ est égal à plusieurs valeurs dans un même enregistrement, c'est quand ce champ est un champ à plusieurs valeurs.
    Je verrai plutôt le critère sur T_PN.Ref_MPOption.Value
    Dans le WHERE je peux écrire T_PN.Ref_MPOption.Value = "Option1" And T_PN.Ref_MPOption.Value = "Option4" pour signifier que je veux que T_PN.Ref_MPOption comporte (au moins) les valeurs "Option1" et "Option4".

    A+

  10. #10
    Futur Membre du Club
    Inscrit en
    Avril 2012
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    @LedZeplin,
    J'avais également essayé le cas que tu proposes, mais le temps d’exécution reste le même. J'utilise simplement le champ MOD pour que ce soit clair pour l'utilisateur. Car un ID reste très flou !

    Anthony

  11. #11
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 884
    Points : 58 498
    Points
    58 498
    Billets dans le blog
    45
    Par défaut
    bonsoir,

    Citation Envoyé par cassof Voir le message
    @LedZeplin,
    J'avais également essayé le cas que tu proposes, mais le temps d’exécution reste le même.
    on pourrait peut-être se préoccuper d'abord que la requête retourne le bon résultat avant de se soucier du temps qu'elle met à retourner un résultat faux, non ?
    D'autant plus qu'on n'a aucune idée du volume de données, si la requête doit retourner 500 000 lignes dans une table de 1 000 000 de lignes, comment s'étonner qu'Access pédale.

    Citation Envoyé par LedZeppII Voir le message
    Dans le WHERE je peux écrire T_PN.Ref_MPOption.Value = "Option1" And T_PN.Ref_MPOption.Value = "Option4" ...
    ben oui, un champ multivalué peut être égal à plusieurs valeurs à la fois, ça ne m'a pas semblé naturel comme écriture, j'ai du la tester pour constater le résultat de mes propres yeux mais elle marche très bien cette syntaxe

    .. à la nuance près que tu as relevée LedzeppII:
    Citation Envoyé par LedZeppII Voir le message
    pour signifier que je veux que T_PN.Ref_MPOption comporte (au moins) les valeurs "Option1" et "Option4".
    ... mais si la requête rame déjà

  12. #12
    Futur Membre du Club
    Inscrit en
    Avril 2012
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    f-leb

    on pourrait peut-être se préoccuper d'abord que la requête retourne le bon résultat avant de se soucier du temps qu'elle met à retourner un résultat faux, non ?
    D'autant plus qu'on n'a aucune idée du volume de données, si la requête doit retourner 500 000 lignes dans une table de 1 000 000 de lignes, comment s'étonner qu'Access pédale.
    1 .Actuellement, la requete renvoye les elements qui comportent au moins les champs du WHERE. Cependant je voudrais qu'il retourne excatement les elements comportant les champs du WHERE.

    2 .Le probleme ne vient pas du nombre de ligne qui est à retourner mais le nombre de critere (champ) mis dans le filtre. Le nombre de ligne à retourner n'exede pas les 10 lignes.

    Merci de votre aide

  13. #13
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    Actuellement, la requête renvoie les éléments qui comportent au moins les champs du WHERE. Cependant je voudrais qu'il retourne exactement les éléments comportant les champs du WHERE.
    Apparemment si on rajoute un DCount sur le champ à plusieurs valeurs ça fonctionne.
    Ta requête a, indirectement, 8 critères sur le champ à plusieurs valeurs T_PN.Ref_MPOption.
    J'ajouterai donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    And DCount("Ref_MPOption", "T_PN", "ID_PNs=" & T_PN.ID_PNs)=8
    Pour le problème de lenteur, je n'ai pas de solution.
    Peut-être retirer la table T_MSN si elle n'est pas indispensable.

    A+

  14. #14
    Futur Membre du Club
    Inscrit en
    Avril 2012
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    @LedZeplin,

    J'ai essayé et ça marche nikel avec le Dcount merci beaucoup par contre je cherche toujours pour la lenteur Mais apparement ça vient des champs multivalué !

    A+

Discussions similaires

  1. [MySQL] Temps d'execution d'une requete via phpMyAdmin ou PHP
    Par gcvoiron dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/10/2009, 00h08
  2. Temps d'execution d'une requete
    Par toto2233 dans le forum Requêtes
    Réponses: 8
    Dernier message: 19/07/2007, 09h55
  3. Réf : Mesurer le temps d 'execution d 'une requete
    Par akrabmehdi dans le forum SQL
    Réponses: 1
    Dernier message: 10/07/2007, 21h48
  4. temp d'execution d'une requete sql
    Par mitoubra dans le forum JDBC
    Réponses: 4
    Dernier message: 15/06/2007, 23h34
  5. [Stratégie] Mesurer le temps d'exécution d'une requête
    Par nice dans le forum Général Java
    Réponses: 5
    Dernier message: 29/01/2006, 18h53

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