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 :

requete hyper longue


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué Avatar de bartimeus35
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2009
    Messages : 504
    Points : 191
    Points
    191
    Par défaut requete hyper longue
    Bonjour ,
    J'ai 2 requêtes qui prennent pas mal de temps :
    requête 1: 10 secondes
    requête 2 :15 secondes
    J'ai scindé ma base en 2 car je veux pouvoir modifier l'interface sans que les utilisateurs soient impactés .pour les tests actuels, les 2 bases de donnés sont dans s des repertoire voisins sur le même disque.
    requête 1 : 1min 04
    requête 2 : 1min 52
    Que faire? Çà me parait long.
    J'ai des regroupements par année sur des dates dans ces 2 requêtes.
    J'ai indexe un maximum de champs de mes tables mais ça ne change rien.
    Merci,
    François M.

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    Il faudrait déjà nous donner le code SQL de ces requêtes.

    Peut-être y a-t-il moyen de l'optimiser.

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Membre habitué Avatar de bartimeus35
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2009
    Messages : 504
    Points : 191
    Points
    191
    Par défaut
    Voila mes requêtes mais sans mon schéma de base et de relations tu vas rien y piger :
    Requêtes c'ées avec le générateur de requete access .

    N°1 elle passe de 10sec à 1min04
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Year([Date_facturation]) AS Année, Sum(CDbl(get_total_HT_from_ID([T_FACT_MO]![ID_FACTURE_MO]))) AS Total_HT
    FROM T_FACT_MO
    WHERE (((T_FACT_MO.ID_Etat)<>ANNULEE()))
    GROUP BY Year([Date_facturation])
    HAVING (((Year([Date_facturation]))>get_Annee_en_cours()-get_nb_annees_histo()));

    N°2 elle passe de 15sec ( déà long) à 1min 52

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Year([T_FACT_MO]![Date_facturation]) AS ANNEE, T_FACT_MO.ID_FACTURE_MO, T_FACT_MO.Num, T_Etats.Lib, MonthName(Month([T_FACT_MO]![Date_facturation])) AS MOIS, T_Clients.Nom, [T_Civilites]![Lib_L] & ' ' & [T_Clients]![Prenom] & ' ' & [T_Clients]![Nom] & ' ' & [T_Clients]![Note] AS CLIENT, T_Types_MO.Lib_L, CDbl(get_total_TTC_from_ID([ID_FACTURE_MO])) AS total_TTC, T_FACT_MO.Date_reglement, T_FACT_MO.Date_encaissement, T_FACT_MO.Date_facturation
    FROM T_Types_MO INNER JOIN (T_Etats INNER JOIN ((T_Civilites INNER JOIN T_Clients ON T_Civilites.ID_Civilite = T_Clients.ID_Civilite) INNER JOIN T_FACT_MO ON T_Clients.ID_Client = T_FACT_MO.ID_Client) ON T_Etats.ID_Etat = T_FACT_MO.ID_Etat) ON T_Types_MO.ID_Type_MO = T_FACT_MO.ID_Type
    ORDER BY Year([T_FACT_MO]![Date_facturation]), T_FACT_MO.Num;

  4. #4
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonjour,
    est-ce que la lenteur de ta 1ére requete ci-dessus ne viendrait pas de l'utilisation de la fonction publique get_total_TTC_from_ID : ... CDbl(get_total_TTC_from_ID([ID_FACTURE_MO])) AS total_TTC ...
    Déjà essayer d' optimiser la fonction get_total_TTC_from_ID qui devrait retourner un double
    Sinon essayer de calculer ce total dans LA requete via un GROUP BY , en ajoutant la table des lignes de factures ?


    Cdlt
    "Always look at the bright side of life." Monty Python.

  5. #5
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Citation Envoyé par micniv Voir le message
    Bonjour,
    est-ce que la lenteur de ta 1ére requete ci-dessus ne viendrait pas de l'utilisation de la fonction publique get_total_TTC_from_ID : ... CDbl(get_total_TTC_from_ID([ID_FACTURE_MO])) AS total_TTC ...
    Déjà essayer d' optimiser la fonction get_total_TTC_from_ID qui devrait retourner un double
    Sinon essayer de calculer ce total dans LA requete via un GROUP BY , en ajoutant la table des lignes de factures ?


    Cdlt
    Oui voir aussi s'il n'y a pas moyen d'utiliser une fonction de domaine ou une sous-requête à la place.

    Par exemple si cette fonction va faire la somme de montant figurant dans le détail de la facture d'identifiant [ID_FACTURE_MO, une fonction de domaine de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DSum("Montant_HT";"T_Detail_Fact_MO","ID_FACTURE_MO=" &  [ID_FACTURE_MO]))
    Ou suivant l'idée de micniv avec incorporation de la table du détail directement dans la requête:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Year([Date_facturation]) AS Année, Sum(CDbl(T_Detail_Fact_MO.Montant_HT))) AS Total_HT
    FROM T_FACT_MO INNER JOIN T_Detail_Fact_MO ON  (T_FACT_MO.[ID_FACTURE_MO] = T_Detail_Fact_MO.[ID_FACTURE_MO])
    WHERE (((T_FACT_MO.ID_Etat)<>ANNULEE()))
    GROUP BY Year([Date_facturation])
    HAVING (((Year([Date_facturation]))>get_Annee_en_cours()-get_nb_annees_histo()));

    A voir aussi les fonctions ANNULEE(), get_Annee_en_cours et get_nb_annees_histo s'il y a pas moyen de les remplacer.

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  6. #6
    Membre habitué Avatar de bartimeus35
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2009
    Messages : 504
    Points : 191
    Points
    191
    Par défaut
    J'ai été obligé de créer la fonction get_total_TTC_from_ID car si je fais le calcul directement dans la requête en ajoutant la table des lignes de facture, j'ei un écart d'arrondi, entre ma factre qui fait le total des arrondis HT et TVA et la on calcule directement plus vite mis j'ai un écrt de 1 ou 2 centimes. car c'est le la'arrondi de HT *(1+TVA)


    Citation Envoyé par micniv Voir le message
    Bonjour,
    est-ce que la lenteur de ta 1ére requete ci-dessus ne viendrait pas de l'utilisation de la fonction publique get_total_TTC_from_ID : ... CDbl(get_total_TTC_from_ID([ID_FACTURE_MO])) AS total_TTC ...
    Déjà essayer d' optimiser la fonction get_total_TTC_from_ID qui devrait retourner un double
    Sinon essayer de calculer ce total dans LA requete via un GROUP BY , en ajoutant la table des lignes de factures ?


    Cdlt

  7. #7
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Citation Envoyé par bartimeus35 Voir le message
    J'ai été obligé de créer la fonction get_total_TTC_from_ID car si je fais le calcul directement dans la requête en ajoutant la table des lignes de facture, j'ei un écart d'arrondi, entre ma factre qui fait le total des arrondis HT et TVA et la on calcule directement plus vite mis j'ai un écrt de 1 ou 2 centimes. car c'est le la'arrondi de HT *(1+TVA)
    Il y a aussi la possibilité de faire la somme par ID_Fact_Mo dans une requête R_Detail_Fact_Mo basé sur la table des détails, et ensuite lier cette requête dans vos requêtes pour récupérer la somme.

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  8. #8
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Bonsoir,

    Les temps donnés sont-ils relevés sur des fichiers en réseau ?
    Est-ce la même chose en local ?

  9. #9
    Membre habitué Avatar de bartimeus35
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2009
    Messages : 504
    Points : 191
    Points
    191
    Par défaut
    C'est la meme chose en local sniff.

  10. #10
    Membre habitué Avatar de bartimeus35
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2009
    Messages : 504
    Points : 191
    Points
    191
    Par défaut
    Citation Envoyé par User Voir le message
    Il y a aussi la possibilité de faire la somme par ID_Fact_Mo dans une requête R_Detail_Fact_Mo basé sur la table des détails, et ensuite lier cette requête dans vos requêtes pour récupérer la somme.

    Cdlt,
    C'est ce que fait ma fonction ;elle appelle une requête qui calcule le total, je l'ai optimisée et c'est bcp mieux !
    J'ai pas réussi a appeler une sous requête via le générateur de requêtes .... J'ai été obligé de créer une fonction, mais c'est OK.

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

Discussions similaires

  1. requete trop longue
    Par realkilla dans le forum WinDev
    Réponses: 6
    Dernier message: 05/12/2007, 14h33
  2. Requete SELECT Longue
    Par tleboukaka dans le forum Bases de données
    Réponses: 5
    Dernier message: 07/09/2007, 15h04
  3. pb requete trop longue
    Par Leimi dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/07/2006, 16h16
  4. requetes trop longues
    Par caro_tpl dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/07/2006, 14h27
  5. Requete trop longue à exécuter
    Par fguilbert dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/06/2006, 10h33

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