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 :

UPDATE fait planter mysql, trop long


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 64
    Points : 39
    Points
    39
    Par défaut UPDATE fait planter mysql, trop long
    Voilà, je réalise un update qui est trop long et qui, semble-t-il pour cette raison, car je n'ai pas un message d'erreur hyper explicite (server shutdown), fait planter mysql.

    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
    16
    17
    18
    UPDATE `Chemins_HArrMax_1320` c1
    SET
    c1.hdepretour=(
                  SELECT c2.hdepchemin FROM `Chemins_HDepMin_1510` c2
                  where (time_to_sec(c2.hdepchemin)>=time_to_sec(c1.hretourminimum) and
                        time_to_sec(c2.harrchemin)<time_to_sec(c1.harrretour)) and
                        c1.codeaeroarr like c2.codeaerodep and c1.codeAerodep like c2.codeaeroarr
     
                  having min(c2.hdepchemin)
                  ),
    c1.harrretour=(
                  SELECT c2.harrchemin FROM `Chemins_HDepMin_1510`  c2
                  where (time_to_sec(c2.hdepchemin)>=time_to_sec(c1.hretourminimum) and
                        time_to_sec(c2.harrchemin)<time_to_sec(c1.harrretour)) and
                        c1.codeaeroarr like c2.codeaerodep and c1.codeAerodep like c2.codeaeroarr
     
                  having min(c2.hdepchemin)
                  );
    Ce que je constate après le message d'erreur c'est que certains de mes champs sont updatés, mais pas tous loin s'en faut. Et si je reproduis la requête ça avance à tout petits pas.
    Donc ma question est comment s'y prendre pour accélérer cette requête?
    Je précise tout de go que je n'ai aucun index sur ces tables qui sont de taille relativement modeste (10 000 à 30 000 lignes) et que tous les champs sont de type texte.

    Pour les curieux, il s'agit d'un test de possibilités d'allers retours sur la journée entre grandes villes.

    voilà voilà, merci pour l'aide.
    Alan

  2. #2
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 64
    Points : 39
    Points
    39
    Par défaut
    comme quoi le simple fait de rédiger son problème c'est le début de la solution.

    j'ai glané sur le forum une formulation différente de la clause HAVING

    c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY c2.hdepchemin DESC LIMIT 1
    eh ben ça a marché!!!

  3. #3
    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 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 040
    Points : 23 795
    Points
    23 795
    Par défaut
    La clause HAVING sert à placer une condition sur une fonction d'agrégation (MIN, MAX, COUNT...).
    Elle est de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HAVING count(...) = ...
    Dans ton premier code, ta syntaxe sur HAVING est incomplète. Ça ne peut donc pas fonctionner .

    ced

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 64
    Points : 39
    Points
    39
    Par défaut
    heu, vas y reexplique mieux s'il te plait j'ai pas compris ou est le pb sur ma clause having.
    thanks

  5. #5
    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 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 040
    Points : 23 795
    Points
    23 795
    Par défaut
    La clause HAVING implique une condition : HAVING min(...) = ... par exemple. C'est un peu comme le filtre WHERE, mais sur les opérations de regroupement (count, min, max...).
    Là, dans tes requêtes, tu mets juste HAVING min(c2.hdepchemin), sans condition. Donc, ça ne sert à rien .

    Plus d'infos sur HAVING ici : http://sqlpro.developpez.com/cours/sqlaz/ensembles/#L2

    ced

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 64
    Points : 39
    Points
    39
    Par défaut
    ah ouais, ca y est j'ai pigé. Merci ced.
    en effet ce que j'avais écrit est à peine plus efficace que de pisser dans le violon.

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

Discussions similaires

  1. [Débutant] FileSystemWatcher: Chemin d'accès trop long fait planter mon programme.
    Par BasicZX81 dans le forum VB.NET
    Réponses: 6
    Dernier message: 18/06/2015, 20h24
  2. identifiant mysql trop long
    Par flashman dans le forum Débuter
    Réponses: 15
    Dernier message: 13/11/2008, 19h59
  3. Réponses: 1
    Dernier message: 07/02/2008, 03h54
  4. Réponses: 8
    Dernier message: 21/07/2006, 12h23
  5. Probleme UPDATE resultat trop long
    Par Tonio_1394 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/10/2004, 12h50

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