【发布时间】:2011-02-14 12:26:03
【问题描述】:
我需要你的帮助来优化那些 mysql 查询,两者都在我的慢查询日志中。
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 INDEX。
解释结果:
编号 |选择类型 |表|类型 |可能的键 |关键 | key_len |参考 |行 |额外的 1 |简单 | c |索引 |空 | date_commentaire | 8 |空 | 119 | 1 |简单 |一个 | eq_ref |初级 |初级 | 3 | c.id_apps | 1 | 1 |简单 |你| eq_ref |初级 |初级 | 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;
解释结果:
编号 |选择类型 |表|类型 |可能的键 |关键 | key_len |参考 |行 |额外的 1 |简单 |一个 |索引 |空 |初级 | 3 |空 | 5336 | 1 |简单 | c | eq_ref |初级 |初级 | 1 | a.类别 | 1 | 1 |简单 |电子| eq_ref |初级 |初级 | 3 | a.editeur | 1 |在 a.categorie、c.id_cat、a.editeur、e.id_edit 和 a.id_apps 上有一个 MySQL INDEX
谢谢
【问题讨论】:
-
你能发布查询计划吗?使用
EXPLAIN SELECT ... -
皮埃尔,不要尝试手动突出显示语法。只需将其格式化为代码(缩进四个空格)并很好地格式化。在这种情况下,我已经为您完成了。
-
各自的数据集有多大?我注意到没有
WHERE子句;您真的希望所有 cmets 和应用程序都返回吗?LIMIT子句是设计的一部分,还是您在测试时添加的? -
谢谢大家,对不起 Marcelo 这是我第一次在 Stackoverflow 上第一次使用 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 和第二个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 没有 WHERE 子句,但它是正常的,并且 LIMIT
标签: mysql optimization