【问题标题】:MySQL query optimization JOINMySQL查询优化JOIN
【发布时间】: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


【解决方案1】:

谢谢大家,抱歉 Marcelo,这是我第一次使用 Stackoverflow

第一个带有 EXPLAIN 的查询:

id select_type table type possible_keys key key_len ref rows Extra

1 SIMPLE c 索引 NULL date_commentaire 8 NULL 119
1 简单的 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 索引 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

【讨论】:

  • 看来你还有一点要学。 SO 是一个问答网站,而不是一个论坛。作为答案发布的内容应回答问题。您发布的信息应该出现在问题中。阅读常见问题解答(点击页面顶部的链接)。有关格式设置的更多信息,请单击帖子编辑器工具栏中的橙色问号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多