2010-05-01 210 views
0

我需要你的幫助來優化那些mysql查詢,兩者都在我的慢速查詢日誌中。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; 

有上c.id_apps,a.id_apps,c.id_utilisateur,u.id_utilisateur和c.date_commentaire一個MySQL索引。

EXPLAIN結果:

 
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; 

EXPLAIN結果:

 
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 |

有上a.categorie,c.id_cat,a.editeur,E中的MySQL索引的。 id_edit and a.id_apps

謝謝

+0

您可以發佈查詢計劃嗎?使用'EXPLAIN SELECT ...' – 2010-05-01 09:22:03

+0

Pierre,不要嘗試用手語法突出顯示。只需將其格式化爲代碼(縮進四個空格)並將其格式化爲好。在這種情況下我已經爲你做了。 – 2010-05-01 09:29:27

+0

各自的數據集有多大?我注意到沒有'WHERE'子句;你真的想要所有的評論和應用程序返回? LIMIT'條款是設計的一部分,還是您在測試時添加它們? – 2010-05-01 09:34:18

回答

0

謝謝你們&對不起馬塞洛這是我第一次#2

與第一查詢說明:

ID SELECT_TYPE表類型possible_keys關鍵key_len裁判行額外

1簡單的C指數NULL date_commentaire 8 NULL 119
1 SIMPLE一個eq_ref PRIMARY PRIMARY 3個c.id_apps 1
1簡單U eq_ref PRIMARY PRIMARY 3 c.id_utilisateur 1

而第二

ID SELECT_TYPE表型possible_keys鍵key_len REF行額外

1 SIMPLE一個索引NULL PRIMARY 3 NULL 5336
1簡單的C eq_ref PRIMARY PRIMARY 1 a.categorie 1
1簡單的電子eq_ref PRIMARY PRIMARY 3 a.editeur 1

+0

看起來你還有一點需要學習。 SO是一個問答網站,而不是論壇。發佈爲答案的內容應回答問題。您發佈的信息應該放在問題中。閱讀常見問題(點擊頁面頂部的鏈接)。有關格式設置的更多信息,請單擊帖子編輯器工具欄中的橙色問號。 – outis 2010-05-01 09:45:11

+0

對不起,我剛剛閱讀了FAQ – Pierre 2010-05-01 10:24:39