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

Langage SQL Discussion :

[MySQL v4.1.9] Lenteur d'une requête SQL


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 35
    Par défaut [MySQL v4.1.9] Lenteur d'une requête SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT DISTINCT bilans.id_bilan, personnes.id_personne, MAX(rendez_vous.fin_rendez_vous), 
    nom_personne, nom_prescripteur, interrompu_bilan, raison_interruption_bilan
     
                 FROM personnes, bilans, commandes, conventions, prescripteurs, rendez_vous
     
                 WHERE personnes.id_personne=bilans.id_personne 
                           AND ((commandes.id_commande=bilans.id_commande AND commandes.id_prescripteur=prescripteurs.id_prescripteur)
                                 OR (conventions.id_convention=bilans.id_convention AND conventions.id_prescripteur=prescripteurs.id_prescripteur
                                 AND conventions.facture_convention='oui'))
     
                           AND (bilans.interrompu_bilan='oui' OR bilans.termine_bilan='oui') 
                           AND bilans.facture_bilan <>'oui'
                           AND rendez_vous.id_bilan=bilans.id_bilan
     
    GROUP BY bilans.id_bilan ORDER BY rendez_vous.fin_rendez_vous, nom_prescripteur, nom_personne


    Ca, c'est le code de la requête. Vous allez me dire, c'est normal que ce soit lent, y'a plein de choses dans les tables, je vais chercher dans 6 tables différentes, j'ai des jointures partout... etc. Je sais déjà, merci

    Mais... la requête, là, me donne le bon résultat. Et je vois pas comment l'écrire autrement. (ça commence un peu à m'agacer, d'ailleurs... méchamment, même.)

    Une idée ? (j'en ai plein du même genre, alors merci de m'expliquer comme si j'étais un bon gros benêt )

  2. #2
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Ingénieur DevOps
    Inscrit en
    Mai 2002
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 214
    Par défaut
    Merci de lire et de vous conformer aux CONSEILS... à lire AVANT de POSTER ! merci
    Alexandre Tranchant
    Ingénieur DevOps pour le Ministère de l'Écologie
    Retrouvez mes articles sur PHP et Symfony

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 35
    Par défaut mmm
    Bon bin... j'ai édité la chose, et j'ai commencé à me dire qu'à l'origine, dans leur base de données, ils auraient pu ajouter un champs de type booléen avec

    "bilan à facturer" dedans

    Le problème c'est qu'ils ont déjà 2 ans de boulot dedans. Donc pas moyen de trifouiller la base.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Sans prendre le temps de creuser plus, je remarque tout de suite les OR dans les jointures qui peuvent être coûteux...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 35
    Par défaut mmm
    Je l'ai dit, y'a tellement de conditions que cette requête a un temps d'exécution exponentiel selon le nombre d'enregistrements dans les tables.

    5 ou 6 enregistrements : temps négligeable.

    840 : 6 minutes 47.

    Ce que j'aimerais, c'est qu'on me dise comment je pourrais tenter de réécrire ça (en m'expliquant bien, avec des dessins ) pour avoir le même résultat, avec au maximum une augmentation linéaire du temps nécessaire.

    Sachant que bon... y'a 50 autres requêtes à la noix écrites de la même manière, à la va-vite. (déjà au début... les champs n'étaient pas indexés... les formulaires non sécurisés... vive le stagiaire précédent...)

    Tout ça se fait sous MySQL v4.1.9 d'après ce cher phpmyadmin.

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Il faudrait déjà que toutes les colonnes de la requête soient identifiées avec leur table d'origine pour qu'on sache comment l'optimiser...
    MySQL 4.1 autorise-t-il les sous-requêtes ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    Citation Envoyé par Alexandre T
    Merci de lire et de vous conformer aux CONSEILS... à lire AVANT de POSTER ! merci
    La première chose à faire, c'est de nous préciser le SGBD pliz ...

    C'est du Oracle, non ? Quelle version ? Parce que les jointures dans la clause WHERE, c'est en général très fortement déconseillé ... sauf limitation du SGBD lui-même bien entendu.
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

Discussions similaires

  1. [MySQL] moteur de rech multip sur une base
    Par speedylol dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 15/03/2006, 17h02
  2. Réponses: 8
    Dernier message: 09/02/2006, 18h05
  3. MySQL Administrator : modifier les données d'une table
    Par Robinounou dans le forum Outils
    Réponses: 4
    Dernier message: 13/07/2005, 17h21
  4. comment rajouter un caractère " ' " dans une requê
    Par GDVL dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 30/07/2004, 16h58
  5. Licence MySql en tant que BD dans une application web
    Par Volta dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 26/02/2004, 14h38

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