2010-05-01 8 views
0

J'ai besoin de votre aide pour optimiser ces requêtes mysql, les deux sont dans mes journaux de requête lente.Optimisation de requête MySQL JOIN

SELECT a.nom, c.id_apps, c.id_commentaire, c.id_utilisateur, 
     c.note_commentaire, u.nom_utilisateur 
    FROM comments AS c 
    LEFT JOIN apps AS a ON c.id_apps = a.id_apps 
    LEFT JOIN users AS u ON c.id_utilisateur = u.id_utilisateur 
ORDER BY c.date_commentaire DESC LIMIT 5; 

Il y a un index MySQL sur c.id_apps, a.id_apps, c.id_utilisateur, u.id_utilisateur et c.date_commentaire.

EXPLIQUEZ Résultat:

 
id | select_type | table | type | possible_keys | key    | key_len | ref    | rows | Extra 
1 | SIMPLE  | c | index | NULL   | date_commentaire | 8  | NULL    | 119 | 
1 | SIMPLE  | a | eq_ref | PRIMARY  | PRIMARY   | 3  | c.id_apps  | 1 | 
1 | SIMPLE  | u | eq_ref | PRIMARY  | PRIMARY   | 3  | c.id_utilisateur | 1 | 

SELECT a.id_apps, a.id_itunes, a.nom, a.prix, a.resume, c.nom_fr_cat, e.nom_edit 
    FROM apps AS a 
    LEFT JOIN cat AS c ON a.categorie = c.id_cat 
    LEFT JOIN edit AS e ON a.editeur = e.id_edit 
ORDER BY a.id_apps DESC LIMIT 20; 

résultat EXPLIQUEZ:

 
id | select_type | table | type | possible_keys | key | key_len | ref   | rows | Extra 
1 | SIMPLE  | a | index | NULL   | PRIMARY | 3 | NULL  | 5336 | 
1 | SIMPLE  | c | eq_ref | PRIMARY  | PRIMARY | 1 | a.categorie | 1 | 
1 | SIMPLE  | e | eq_ref | PRIMARY  | PRIMARY | 3 | a.editeur | 1 |

Il y a un index MySQL sur a.categorie, c.id_cat, a.editeur, e. id_edit et a.id_apps

Merci

+0

Pouvez-vous publier le plan de requête? Utilisez 'EXPLAIN SELECT ...' –

+0

Pierre, n'essayez pas de mettre en évidence la syntaxe à la main. Il suffit de le formater en code (indenter quatre espaces) et le formater correctement. Je l'ai fait pour vous dans ce cas. –

+0

Quelle est la taille des jeux de données respectifs? Je remarque qu'il n'y a pas de clauses "WHERE"; Voulez-vous vraiment que tous les commentaires et applications soient renvoyés? Les clauses 'LIMIT' font-elles partie de la conception, ou les avez-vous ajoutées lors des tests? –

Répondre

0

Merci les gars & désolé Marcelo c'est ma première fois sur Stackoverflow

La première requête avec EXPLAIN:

id de type table select_type possible_keys clés lignes ref key_len supplémentaires

1 index SIMPLE c date_commentaire NULL 8 NULL 119
1 SIMPLE une PRIMAIRE PRIMARY eq_ref 3 c.id_apps 1
une simple U eq_ref PRIMAIRE PRIMARY 3 c.id_utilisateur 1

Et le second

id select_type type de table possible_keys clés lignes ref key_len supplémentaires

1 SIMPLE un NULL index primaire 3 NULL 5336
1 SIMPLE c eq_ref PRIMAIRES 1 a.categorie 1
1 SIMPLE e eq_ref PRIMARY PRIMARY 3 a.editeur 1

+0

On dirait que vous avez un peu plus à apprendre. SO est un site de questions et réponses, plutôt qu'un forum. Le contenu publié en tant que réponses devrait répondre à la question. L'information que vous avez posté devrait aller dans la question. Lisez la FAQ (suivez le lien en haut de la page). Pour plus d'informations sur le formatage, cliquez sur le point d'interrogation orange dans la barre d'outils de l'éditeur de publication. – outis

+0

Désolé, je viens de lire la FAQ – Pierre