Surcharge BDD ?
26 messages
• Page 2 sur 2 • 1, 2
Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics
- RomsIW
- WRInaute passionné

- Messages: 1126
- Inscription: 25 Mai 2004
FlorentP a écrit:C'est quoi la requete et la structure des tables ?
ça tu l'auras deviné, c'est très confidentiel. Je suis désolé j'ai donné le maximum d'informations mais tout le monde n'a pas à savoir ce qui se trouve comme informations dans notre base de commandes.. si tu as des questions plus précises, je pourrai certainement te répondre..
- FlorentP
- WRInaute discret

- Messages: 145
- Inscription: 25 Juin 2005
Si tu ne veux pas donner la vrai structure et la requete, modifie les noms et supprime tout ce qui ne sert à rien. Le but étant se savoir :
- où se trouvent tes index
- sur quels champs tu fais tes jointures
Parceque là clairement d'après ton explain, ya des gros soucis, ya une seul index utilisé sur 4 endroits où tu pourrait utilisé donc forcément c'est violent.
Sans ça, on peut pas t'aider, on peut juste te rediriger vers des cours sur mysql, tu trouvera ça facilement sur google
- où se trouvent tes index
- sur quels champs tu fais tes jointures
Parceque là clairement d'après ton explain, ya des gros soucis, ya une seul index utilisé sur 4 endroits où tu pourrait utilisé donc forcément c'est violent.
Sans ça, on peut pas t'aider, on peut juste te rediriger vers des cours sur mysql, tu trouvera ça facilement sur google
- FlorentP
- WRInaute discret

- Messages: 145
- Inscription: 25 Juin 2005
RomsIW a écrit:comment fait-on ça ?julienr a écrit:tu peux essayer de demander à mysql d'ordonner physiquement tes lignes sur ta colonne date, mais je ne sais pas ce que cela vaut
S'pas ça qui va optimiser tes jointures, ça ça peut servir pour économiser des balades inutiles de la tête de lecture sur le disque dûr, c'est un peu le dernier niveau d'optimisation, t'es encore loin de ça tant que t'as pas peaufiné tes jointures :p
- RomsIW
- WRInaute passionné

- Messages: 1126
- Inscription: 25 Mai 2004
FlorentP a écrit:Si tu ne veux pas donner la vrai structure et la requete, modifie les noms et supprime tout ce qui ne sert à rien. Le but étant se savoir :
- où se trouvent tes index
- sur quels champs tu fais tes jointures
Parceque là clairement d'après ton explain, ya des gros soucis, ya une seul index utilisé sur 4 endroits où tu pourrait utilisé donc forcément c'est violent.
Sans ça, on peut pas t'aider, on peut juste te rediriger vers des cours sur mysql, tu trouvera ça facilement sur google
ok voici ce que je peux dire :
- Code: Tout sélectionner
SELECT D.*, C.lettre, C.libelle, C.couleur, PC.tarif, F1.num AS num_facture_type1
FROM TABLE_COMMANDES AS D
LEFT JOIN TABLE_REL_PRODUITS_PAR_CENTRES AS PC ON PC.id_centre=D.id_centre AND PC.id_produit=D.type_saut
LEFT JOIN TABLE_CENTRES AS C ON C.id_centre=D.id_centre
LEFT JOIN TABLE_FACTURES AS F1 ON F1.id_cmd=D.id_cmd
WHERE D.etat<>'-1' ORDER BY D.date DESC LIMIT 0,20
à propos des index :
- Code: Tout sélectionner
PRIMARY 5249 id
INDEX 5249 date
- FlorentP
- WRInaute discret

- Messages: 145
- Inscription: 25 Juin 2005
TABLE_CENTRES => il faut un index simple sur "id_centre" (même une primary key serait logique, y'en a pas déjà ?)
TABLE_FACTURES => idem sur "id_cmd"
TABLE_REL_PRODUITS_PAR_CENTRES => il faut un index composé, sur "id_centre, id_produit"
(ou "id_produit, id_centre" selon comment tu veux que cet index puisse resservir)
TABLE_COMMANDES => if faut un index sur "etat, date"
TABLE_FACTURES => idem sur "id_cmd"
TABLE_REL_PRODUITS_PAR_CENTRES => il faut un index composé, sur "id_centre, id_produit"
(ou "id_produit, id_centre" selon comment tu veux que cet index puisse resservir)
TABLE_COMMANDES => if faut un index sur "etat, date"
- RomsIW
- WRInaute passionné

- Messages: 1126
- Inscription: 25 Mai 2004
FlorentP a écrit:TABLE_CENTRES => il faut un index simple sur "id_centre" (même une primary key serait logique, y'en a pas déjà ?)
TABLE_FACTURES => idem sur "id_cmd"
TABLE_REL_PRODUITS_PAR_CENTRES => il faut un index composé, sur "id_centre, id_produit"
(ou "id_produit, id_centre" selon comment tu veux que cet index puisse resservir)
TABLE_COMMANDES => if faut un index sur "etat, date"
TABLE_CENTRES il y a la PK évidemment
TABLE_FACTURES idem
TABLE_REL... comment fait on un index composé ?
TABLE_COMMANDES comment fait on un index sur "etat, date" ?
Pour le D.*, c'était pour raccourcir car il y a pas mal de champs sélectionnés et qu'il n'y a pas de champs intéressant à citer ici
merci encore
- FlorentP
- WRInaute discret

- Messages: 145
- Inscription: 25 Juin 2005
C'est bizarre que tu dises qu'il y a une PK sur le champs parce que ton explain indique que la jointure n'utilise pas d'index :
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE D ALL NULL NULL NULL NULL 5234 Using where; Using temporary; Using filesort
1 SIMPLE PC ALL NULL NULL NULL NULL 69
1 SIMPLE C eq_ref PRIMARY PRIMARY 4 qgcom2.D.centre 1
1 SIMPLE F4 ALL NULL NULL NULL NULL 1050
=> Sur la table "C" il y a bien un index, nikel, le type est "eq_ref"
=> pour F4 par contre, le type est "ALL", c'est à dire qu'il n'y pas d'index, mysql scan toute le contenu de la table dans le disque dur => très lourd
Pour l'index simple :
ALTER TABLE t ADD INDEX (c)
Pour un index composé :
ALTER TABLE t ADD INDEX (c1,c2)
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE D ALL NULL NULL NULL NULL 5234 Using where; Using temporary; Using filesort
1 SIMPLE PC ALL NULL NULL NULL NULL 69
1 SIMPLE C eq_ref PRIMARY PRIMARY 4 qgcom2.D.centre 1
1 SIMPLE F4 ALL NULL NULL NULL NULL 1050
=> Sur la table "C" il y a bien un index, nikel, le type est "eq_ref"
=> pour F4 par contre, le type est "ALL", c'est à dire qu'il n'y pas d'index, mysql scan toute le contenu de la table dans le disque dur => très lourd
Pour l'index simple :
ALTER TABLE t ADD INDEX (c)
Pour un index composé :
ALTER TABLE t ADD INDEX (c1,c2)
- RomsIW
- WRInaute passionné

- Messages: 1126
- Inscription: 25 Mai 2004
FlorentP a écrit:C'est bizarre que tu dises qu'il y a une PK sur le champs parce que ton explain indique que la jointure n'utilise pas d'index :
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE D ALL NULL NULL NULL NULL 5234 Using where; Using temporary; Using filesort
1 SIMPLE PC ALL NULL NULL NULL NULL 69
1 SIMPLE C eq_ref PRIMARY PRIMARY 4 qgcom2.D.centre 1
1 SIMPLE F4 ALL NULL NULL NULL NULL 1050
=> Sur la table "C" il y a bien un index, nikel, le type est "eq_ref"
=> pour F4 par contre, le type est "ALL", c'est à dire qu'il n'y pas d'index, mysql scan toute le contenu de la table dans le disque dur => très lourd
Pour l'index simple :
ALTER TABLE t ADD INDEX (c)
Pour un index composé :
ALTER TABLE t ADD INDEX (c1,c2)
J'ai réglé le pb de façon très simple :
j'ai limité la recherche à un certain nombre de résultats : "recherche parmi les X dernières commande (LAST_INSERT_ID - X)" et c'est devenu très rapide d'un coup
Merci !
26 messages
• Page 2 sur 2 • 1, 2
Formation recommandée sur ce thème :
Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par les experts Google Analytics de Ranking Metrics.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Script de mise en cache des pages (PHP MySQL) - 09-08-2010
- Googlebot, le robot d'indexation de Google - 21-02-2003
- Optimiser ses codes HTTP pour le référencement - 12-12-2008
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
