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

 MySQL Discussion :

Optimisation UPDATE trop long avec un INNER JOIN


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 19
    Par défaut Optimisation UPDATE trop long avec un INNER JOIN
    Bonsoir,

    Je possede deux tables assez grandes en data de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Table TJQ
     
    -TKT_AIRLINE  -TKT_NUMBER  -MONTANT_ACHAT  -PAX_NAME  -ID_BILLET
     057           12345678     700             DUPONT     NULL
     157           12345679     550             ALFRED     NULL
     157           12345682     490             MICKAEL    NULL
     ...           ........     ...             .......    ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Table BILLETS
     
    -ID_BILLET  -COMPAGNIE  -NUMERO_BILLET  -MONTANT_VENTE
      001        057         12345678        745 
      002        157         12345679        585 
      003        157         12345682        530
    J'aimerai optimiser cette commander pour mettre à jour mon BILLETS.id_billet comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE TJQ t, BILLETS b
    SET t.id_billet = b.id_billet
    WHERE t.TKT_AIRLINE = b.compagnie
    AND t.TKT_NUMBER = b.numero_billet
    AND b.numero_billet IS NOT NULL
    AND b.compagnie IS NOT NULL
    Je pense qu'avec un UPDATE INNER JOIN, cela accelera ma requete
    si quelqu'un peut m'aider à optimiser cela, je suis un peu perdu avec les INNER JOIN

    Merci d'avance

  2. #2
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    Je dirais ceci ... à voir avec les autres réponses puis à tester
    mais avant ... sauvegarde !
    ou bien mieux, passage de la requête dans un environnement de test ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    UPDATE TJQ t
    inner join BILLETS b
    on t.TKT_AIRLINE = b.compagnie
     AND t.TKT_NUMBER = b.numero_billet
    SET t.id_billet = b.id_billet 
    WHERE b.numero_billet IS NOT NULL
     AND b.compagnie IS NOT NULL

  3. #3
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 19
    Par défaut
    Effectivement pour de l'optimisation, c'est de l'optimisation.
    Je passe de 142sec à 3sec

    Est ce qu'il est possible de m'expliquer simplement la difference entre ces deux requetes : avec et sans le INNER JOIN

  4. #4
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    Pour savoir quel chemin, plan, index etc.
    une requête prend pour s'exécuter il faut s'intéresser aux EXPLAIN
    https://dev.mysql.com/doc/refman/5.6/en/explain.html

    Maintenant quand un update commence
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE TJQ t, BILLETS b ...
    et qu'on veut modifier uniquement TJQ, je dirais que tout de suite il
    faut se demander comment réécrire la requête ...

    Ps : Pour la partie qui passe de 142s en 3s, il y a longtemps un ensemble de requêtes, une fois mis en prod
    renvoyait une réponse en +30 minutes le client me demandait s'il ne fallait pas changer de machine ?
    Une fois les liaisons revues ... en moins de 10 secondes le tout s'exécutait, donc souvent ça
    vaut le coup de bien réfléchir et de prendre du recul sur sa BdD et ses requêtes ...

  5. #5
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 19
    Par défaut
    Merci pour tout, et de ton aide qui m'a fait gagner enormement de temps

Discussions similaires

  1. Pb d'affichage avec un INNER JOIN
    Par Myogtha dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 18/10/2007, 13h58
  2. [Optimisation] Requete trop lourde avec Left outer join...
    Par batosai dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/05/2006, 14h40
  3. [SQL] Requête dans une requête...avec des INNER JOIN!
    Par PedroBD dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 06/04/2006, 09h26
  4. une requête avec plusieurs INNER JOIN, cmt faire ?
    Par elhosni dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/01/2006, 18h55
  5. requête sql avec clause INNER JOIN
    Par new_wave dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/08/2005, 16h47

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