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 :

Requête qui est lente et j'arrive pas a l’optimiser


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2020
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2020
    Messages : 24
    Points : 24
    Points
    24
    Par défaut Requête qui est lente et j'arrive pas a l’optimiser
    bonjour,
    j'ai besoin de votre aide j'ai une requête qui et lente et j'arrive pas a l’optimiser pouvez vous m'aider ?


    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
     
    INSERT INTO`t_stock` (
        `clef`,
        `ref`,
        GLOBAL,
        `st_doc40`,
        `dispo`,
        `dispo_instantane`,
        `fini_intermediaire_sans_st`,
        `lavage_doc50`,
        `avant_montage_deja_lave_doc50`,
        `depart_doc50`,
        `doc50`,
        `retour_doc50`,
        `fini_sans_st`,
        `lavage_doc60`,
        `depart_doc60`,
        `doc60`,
        `retour_doc60`,
        `avant_montage_deja_lave`,
        `rack_synchro`,
        `lavage`,
        `module`,
        `stock_secu_module`,
        `doc70`,
        `magasin`,
        `magasin_dim`,
        `magasin_transit`,
        `magasin_consignation`,
        `magart`,
        `magart_dim`,
        `magart_transit`,
        `magart_consignation`
      )
    SELECT`art`.`clef`,
      `art`.`ref`,
      `stk`.`global`,
      `ifnull` (`st`.`st_doc40`, ?) AS `st_doc40`,
      `stk`.`dispo`,
      `ifnull` (`stk_brut`.`stock_dispo`, ?) AS `dispo_instantane`,
      IF (
        (
          `art`.`module` = ?
          AND `art`.`type` != ?
        )
        OR `art`.`type` = ?,
        `stk`.`module1` - `ifnull` (`sst50`.`en_lav`, ?) - `ifnull` (`st`.`st_doc50`, ?) - `ifnull` (`sst50`.`depart`, ?) - `ifnull` (`sst50`.`recue`, ?)

    Merci d'avance .

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    La restriction est mal codée, il doit y avoir une erreur de copier coller :

    [...] OR `art`.`type` = ?, `stk`.`module1` - `ifnull [...] n'est pas une syntaxe correcte...

    De plus, le nombre de colonnes important de votre table fait penser à une table "obèse" symptomatique d'une mauvaise modélisation et source de performances dégradées.

    enfin la requête n'est pas complète (il manque la clause FROM) et il faut le script des tables et index.

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    La requête présentée est incomplète (manquent une partie des colonnes et la clause from).
    Par ailleurs, il est inutile d'encadrer tous les noms d'objets. Seuls ceux qui dérogent à la norme (caractères hors [A-Z0-9_], mots réservés) nécessitent ce traitement.
    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.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2020
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2020
    Messages : 24
    Points : 24
    Points
    24
    Par défaut
    bonjour c'est vrai je viens de voir que j ai mal coller ma requête désoler la voici au complet .

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    INSERT INTO`t_stock` (
        `clef`,
        `ref`,
        GLOBAL,
        `st_doc40`,
        `dispo`,
        `dispo_instantane`,
        `fini_intermediaire_sans_st`,
        `lavage_doc50`,
        `avant_montage_deja_lave_doc50`,
        `depart_doc50`,
        `doc50`,
        `retour_doc50`,
        `fini_sans_st`,
        `lavage_doc60`,
        `depart_doc60`,
        `doc60`,
        `retour_doc60`,
        `avant_montage_deja_lave`,
        `rack_synchro`,
        `lavage`,
        `module`,
        `stock_secu_module`,
        `doc70`,
        `magasin`,
        `magasin_dim`,
        `magasin_transit`,
        `magasin_consignation`,
        `magart`,
        `magart_dim`,
        `magart_transit`,
        `magart_consignation`
      )
    SELECT`art`.`clef`,
      `art`.`ref`,
      `stk`.`global`,
      `ifnull` (`st`.`st_doc40`, ?) AS `st_doc40`,
      `stk`.`dispo`,
      `ifnull` (`stk_brut`.`stock_dispo`, ?) AS `dispo_instantane`,
      IF (
        (
          `art`.`module` = ?
          AND `art`.`type` != ?
        )
        OR `art`.`type` = ?,
        `stk`.`module1` - `ifnull` (`sst50`.`en_lav`, ?) - `ifnull` (`st`.`st_doc50`, ?) - `ifnull` (`sst50`.`depart`, ?) - `ifnull` (`sst50`.`recue`, ?)
    		, IF( ( art.module=1 AND art.type!=3 ) OR art.type=4 
    		    , stk.module1-IFNULL(sst50.en_lav,0)-IFNULL(st.st_doc50,0)-IFNULL(sst50.depart,0)-IFNULL(sst50.recue,0) 
    		    , stk.module1 ) AS fini_intermediaire_sans_st 
     
    		, IF( ( art.module=1 AND art.type!=3 ) OR art.type=4 
    		    , stk.module1-IFNULL(sst50.en_lav,0)-IFNULL(st.st_doc50,0)-IFNULL(sst50.depart,0)-IFNULL(sst50.recue,0) -IFNULL(sst60.en_lav,0)-IFNULL(st.st_doc60,0)-IFNULL(sst60.depart,0)-IFNULL(sst60.recue,0) 
    		    , stk.module1 ) AS fini_intermediaire_sans_st 
     
    		, IFNULL(sst50.en_lav,0) AS lavage_doc50 
    		, IFNULL(sst50.au_lavage,0) AS avant_montage_deja_lave_doc50 
     
    		, IFNULL(sst50.depart,0) AS depart_doc50 
    		, IFNULL(st.st_doc50,0) AS doc50 
    		, IFNULL(sst50.recue,0) AS retour_doc50 
     
    		    , IF( art.type=4  
    		        , stk.fini-stk.module1-IFNULL(sst60.en_lav,0)-IFNULL(st.st_doc60,0)-IFNULL(sst60.depart,0)-IFNULL(sst60.recue,0)-IFNULL(sst60.au_lavage,0) 
    		        , stk.fini-stk.module1-IFNULL(sst60.en_lav,0)-IFNULL(st.st_doc60,0)-IFNULL(sst60.depart,0)-IFNULL(sst60.recue,0)-IFNULL(sst60.au_lavage,0) ) 
    		    AS fini_sans_st  
     
    		    , IF( art.type=4  
    		        , stk.fini-stk.module1 
    		        , stk.fini-stk.module1 ) 
    		    AS fini_sans_st  
     
    		, IFNULL(sst60.en_lav,0) AS lavage_doc60 
    		, IFNULL(sst60.depart,0) AS depart_doc60 
    		, IFNULL(st.st_doc60,0) AS doc60 
    		, IFNULL(sst60.recue,0) AS retour_doc60 
    		, IFNULL(sst60.au_lavage,0) AS avant_montage_deja_lave 
     
    		, IFNULL( rs.qt, 0 ) AS rack_synchro 
    		, IFNULL( lav.qt, 0 ) AS lavage 
     
    		, 0 AS stock_secu_module 
     
    		, IFNULL(st.st_doc70, 0 ) AS doc70 
     
    		, stk.magasin-IFNULL( dim.magasin, 0 )-IFNULL( transit.magasin, 0 )-IFNULL( cons.magasin, 0 ) AS magasin  
    		, IFNULL( dim.magasin, 0 ) AS magasin_dim 
    		, IFNULL( transit.magasin, 0 ) AS magasin_transit 
    		, IFNULL( cons.magasin, 0 ) AS magasin_consignation 
     
    		, stk.magart-IFNULL( dim.magart, 0 )-IFNULL( transit.magart, 0 )-IFNULL( cons.magart, 0 ) AS magart  
    		, IFNULL( dim.magart, 0 ) AS magart_dim 
    		, IFNULL( transit.magart, 0 ) AS magart_transit 
    		, IFNULL( cons.magart, 0 ) AS magart_consignation 
    		FROM  gds_gen_vtstk AS stk 
    		     JOIN gen_def_article AS art ON stk.clef = art.clef 
    		      LEFT JOIN gds_stock_brut_uniquement AS stk_brut ON stk_brut.ref = art.ref 
    		     LEFT JOIN t_sst AS st ON st.adr = stk.clef 
    		     LEFT JOIN t_impregn AS sst50 ON art.ref = sst50.ref 
    		     LEFT JOIN t_anod AS sst60 ON art.ref = sst60.ref 
    		     LEFT JOIN t_dim AS dim ON dim.ref=art.ref 
    		     LEFT JOIN t_transit AS transit ON transit.ref=art.ref 
    		     LEFT JOIN t_cons AS cons ON cons.ref=art.ref 
    		     LEFT JOIN t_rack_synchro AS rs ON rs.ref=art.ref 
    		     LEFT JOIN gds_stk_lav AS lav ON lav.ref=art.ref 
    		WHERE art.ref >0 
    		ORDER BY art.ref

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Je vois toujours la même bizarrerie [...] OR `art`.`type` = ?, `stk`.`module1` - `ifnull` [...].

    Quoi qu'il en soit, la première chose à faire est de tester la requête SELECT isolément.

    Puis une fois le select mis au point (en vous débarrassant des quotes inutiles comme l'a justement remarqué AL1__24), si les perfs sont mauvaises, communiquez le script complet CREATE TABLE et CREATE INDEX de toutes les tables concernées.

    EDIT : à l'inverse, il manque des quotes inversées autour du nom de colonne `GLOBAL` car c'est un mot réservé SQL.

Discussions similaires

  1. Requête qui marche sur 11.1 mais pas 11.2
    Par dbaenbois dans le forum Oracle
    Réponses: 2
    Dernier message: 18/02/2010, 09h04
  2. Réponses: 5
    Dernier message: 26/08/2009, 15h40
  3. Ce qui est dans une table mais pas dans l'autre !
    Par youyoule dans le forum Requêtes
    Réponses: 4
    Dernier message: 30/12/2007, 12h57
  4. Réponses: 2
    Dernier message: 19/12/2007, 19h06
  5. scrollbar qui dans les navigateurs n'arrive pas à faire parcourir toute la page
    Par katlinea dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 30/07/2007, 10h02

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