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 MySQL Discussion :

optimisation d'un update where(select)


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de nimbus_77
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Par défaut optimisation d'un update where(select)
    Bonsoir,

    j'ai cette requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE base_jour,clients SET base_jour.RteZone = clients.RteZone 
    WHERE EXISTS ( 
    SELECT CpteCli,RteZone FROM clients 
    WHERE  clients.CpteCli = base_jour.CpteCli ) 
    AND base.date_expe = '$date_jour'
    qui testée sur un fichier de 50 lignes fonctionne parfaitement, par conte quand je l'applique sur ma base principale ( 280 000 lignes ) mets un temps ... TROP ! ( plus de 7 mn avant que je ne la stoppe ...

    Y a t'il moyen d'optimiser cette requette ?
    sachant que les modification a appliquer sont sur l'insertion du jour environ 3000 lignes située par : base.date_expe = '$date_jour' .

    Les champs CpteCli et date_expe sont indexés ...

    Merci de vos conseils

    nimbus

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 061
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 061
    Par défaut
    Bonjour,

    MySQL autorise les jointures dans la syntaxe du UPDATE.
    Ca éviterait le EXISTS, qui doit en partie expliquer la durée de la requête.

    Sans avoir testé, est-ce que la requête suivante donne un résultat équivalent ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE base_jour
    INNER JOIN clients ON base_jour.CpteCli = clients.CpteCli 
    SET base_jour.RteZone = clients.RteZone 
    WHERE base_jour.date_expe = '$date_jour'
    A tester

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre confirmé Avatar de nimbus_77
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Par défaut Merci
    Nickel OUI et en moins de 2 secondes

    merci

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 061
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 061
    Par défaut
    C'est stupéfiant ce qu'une écriture non optimisée d'une requête peut entraîner comme performances dégradées !
    De 7 minutes (et encore, avec interruption), ça passe à moins de 2 secondes ?

    Ravi que ça marche du premier coup .

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Membre confirmé Avatar de nimbus_77
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Par défaut
    Oui je viens de le constater ...

    Ce qui a pour conséquence immédiate de m'entrainer à vérifier l'ensemble de mes requetes ....... lol encore un week end de reve en perspective !

    merci Ced

  6. #6
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    Citation Envoyé par ced Voir le message
    C'est stupéfiant ce qu'une écriture non optimisée d'une requête peut entraîner comme performances dégradées !
    Encore que dans ce cas la sous-requête n'est pas la principale fautive. Retirer "clients" de la clause UPDATE aurait déjà bien aidé car la requête d'origine considérait tous les couples (base_jour, clients) pour lesquels (base.date_expe = '$date_jour') sans lien entre base_jour et clients. Du coup ça en fait beaucoup, surtout avec le EXISTS lancé pour chacun.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/08/2012, 13h48
  2. select --> update ou update where !=
    Par Kiroukool dans le forum SQL
    Réponses: 4
    Dernier message: 22/04/2008, 10h13
  3. [ASE][T-SQL] Optimisation d'un update
    Par metheorn dans le forum Sybase
    Réponses: 2
    Dernier message: 06/03/2006, 13h12
  4. [Oracle9i/ Pl/Sql] Update et select en même temps
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 7
    Dernier message: 31/05/2005, 17h26
  5. Optimisations mysql sur les requêtes SELECT: index
    Par leo'z dans le forum Débuter
    Réponses: 2
    Dernier message: 29/11/2003, 13h23

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