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 :

Requête avec beaucoup de inner join


Sujet :

Requêtes et SQL.

  1. #1
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 292
    Points
    292
    Billets dans le blog
    1
    Par défaut Requête avec beaucoup de inner join
    j'ai fait une requête sur plusieurs requêtes mais j'ai un temps d'exécution relativement long et c'est carrément catastrophique si je fait un état sur ladite requête.
    Y a t il une solution pour optimiser cette requête?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT réception.[N° échantillon], semaine.N°semaine, [Amidon Calcul].[Amid résultat], [Azote Calcul].[NT /brut], [Azote Calcul].[NT /sec], [Calcium Calcul].[Ca résultat], [Cellulose Calcul].[Cel résultat], [Cendres Calcul].[MS 103°C résultat], [Cendres Calcul].[MM résultat brut], [Cendres Calcul].[MM résultat /sec], [Digestibilité Calcul].max, [Humidité Calcul].[Humidité Résultat], [Lignine Calcul].[Lig résultat], [Phosphore Calcul].[P résultat], [Sucres Calcul].[Sucres résultat]
    FROM (((semaine INNER JOIN (((((((réception INNER JOIN [Azote Calcul] ON réception.[N° échantillon] = [Azote Calcul].[N°éch_azote]) INNER JOIN [Calcium Calcul] ON réception.[N° échantillon] = [Calcium Calcul].[N° éch_calcium]) INNER JOIN [Cellulose Calcul] ON réception.[N° échantillon] = [Cellulose Calcul].[N° éch_cellulose]) INNER JOIN [Digestibilité Calcul] ON réception.[N° échantillon] = [Digestibilité Calcul].[N° éch_digestibilité]) INNER JOIN [Lignine Calcul] ON réception.[N° échantillon] = [Lignine Calcul].[N° éch_lignine]) INNER JOIN [Phosphore Calcul] ON réception.[N° échantillon] = [Phosphore Calcul].[N° éch_phosphore]) INNER JOIN [Sucres Calcul] ON réception.[N° échantillon] = [Sucres Calcul].[N° éch_sucres]) ON semaine.[N°semaine] = réception.[semaine]) INNER JOIN [Amidon Calcul] ON réception.[N° échantillon] = [Amidon Calcul].[N°éch_amidon]) INNER JOIN [Humidité Calcul] ON réception.[N° échantillon] = [Humidité Calcul].[N° éch_humidité]) INNER JOIN [Cendres Calcul] ON réception.[N° échantillon] = [Cendres Calcul].[N° éch_cendres];

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,
    Citation Envoyé par elnipal Voir le message
    j'ai fait une requête sur plusieurs requêtes mais j'ai un temps d'exécution relativement long et c'est carrément catastrophique si je fait un état sur ladite requête.
    Y a t il une solution pour optimiser cette requête?
    La première chose à faire est de vérifier, pour toutes les tables, que tous les champs joints sont bien indexés.
    Si ce n'est pas encore le cas, la création d'index devrait "booster" ta requête.
    _

  3. #3
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 292
    Points
    292
    Billets dans le blog
    1
    Par défaut
    en fait seul 2 champs proviennent de tables et ils sont bien indexés
    Tous les autres champs sont des calculs faits dans des requetes

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par elnipal Voir le message
    en fait seul 2 champs proviennent de tables et ils sont bien indexés
    Tous les autres champs sont des calculs faits dans des requetes
    Alors, tu pourrais envisager d'utiliser des tables de travail destinées à recevoir le résultat de tes requêtes qui font les calculs, et puis repartir sur une nouvelle requête de jointure avec ces tables de travail en lieu et place de tes anciennes requêtes.

    Oui, c'est un peu fastidieux mais les performances sont à l'arrivée.
    _

  5. #5
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 292
    Points
    292
    Billets dans le blog
    1
    Par défaut
    je suis preneur mais je ne sais pas comment alimenter une table par des résultats de requetes

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    J'ai regardé d'un peu plus près ta super requête.

    En fait, le "noeud" du Pb concerne la table [réception] et toutes les requêtes qui lui sont jointes.
    Prenons le cas de la requête [Amidon Calcul].
    Pourrais-tu nous donner son code ?

    Mais, s'il existe une relation 1-1 entre [réception] et [Amidon Calcul] (et vers les autres requêtes de calcul), alors l'utilisation d'une requête spécifique pour chacun des calculs ne me semble pas adaptée.

    Donc, pour en être sûr, je voudrais voir le SQL de la requête [Amidon Calcul].
    Merci.
    _

  7. #7
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 292
    Points
    292
    Billets dans le blog
    1
    Par défaut
    je ne suis plus au boulot donc pour le code ce sera demain!
    effectivement, toutes mes tables sont en relation 1-1, je sais que quand on peut tout grouper dans une unique table c'est mieux.
    si j'ai fait ça comme ça c'est pour la clarté : une table = une analyse
    et comme il va s'en rajouter de temps en temps, je pense que la structure de la base est plus lisible
    j'ai fait une requte par analyse pour mes calculs, j'ai donc autant de requete que de table
    si tu ne trouves pas logique mes requetes calculées, comment puis-je procéder pour rassembler tous mes calculs et surtout éviter cette lenteur?

Discussions similaires

  1. Requête avec beaucoup de like
    Par LeSquale dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/11/2014, 18h14
  2. [AC-2007] Ne pas avoir de doublons dans une requête avec beaucoup de OU
    Par GroFlo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/02/2012, 15h52
  3. Problème avec UPDATE et INNER JOIN
    Par korbn dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/05/2009, 20h52
  4. soucis avec des requetes "INNER JOIN" Imbriquées
    Par Moutonstar dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 13/11/2008, 12h12
  5. Requêtes avec beaucoup de champs vides à éviter.
    Par fred_vannes56 dans le forum Requêtes et SQL.
    Réponses: 26
    Dernier message: 23/04/2008, 16h20

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