gpt4 book ai didi

mysql - EXPLAIN SELECT 结果的说明

转载 作者:行者123 更新时间:2023-11-29 13:21:28 25 4
gpt4 key购买 nike

通常我检查我的sql语句

EXPLAIN SELECT ...

今天我尝试了试用版“Jet Profiler for mysql”,它向我显示了对此查询的以下解释

SELECT   c.categories_id,
cd.categories_name
FROM categories c
JOIN categories_description_de cd ON c.categories_id = cd.categories_id
WHERE c.parent_id = 0
AND c.categories_status = 1
AND c.group_permission_1 = 1
ORDER BY c.sort_order,
cd.categories_name

不幸的是我无法弄清楚。

这是命令行的 EXPLAIN 结果。我无法粘贴代码,因为它太长了。 enter image description here

最佳答案

这里有太多的内容无法解释 EXPLAIN 的所有输出,并且您没有具体说明您无法理解其中的哪一部分。

除了 @dg99 显示的 MySQL 手册链接之外,还有其他资源可用于理解 EXPLAIN。我的公司 Percona 在这个领域做了很多演示。我们有许多在线网络研讨会,可以免费观看,但需要注册。

简单地说,这是我在您的 EXPLAIN 输出中看到的内容:

  • 优化器会考虑类别的多个索引,但我认为其中没有一个最适合此查询。理想情况下,您可以使用索引来减少搜索,以仅匹配您希望出现在结果集中的行。
  • 其次,使用索引按预先排序的顺序检索行,这样您就不必在每次查询期间承担该成本。对每个查询进行排序由 using filesort 指示。
  • 用于categories_description_de的索引是主键索引。您唯一可以做得更好的事情就是将描述放入主categories 表中,并避免连接。
  • 我会选择(parent_id、categories_status、group_permission_1、sort_order)的复合索引
  • 我建议您ORDER BY c.sort_order,而无需同时按另一个表中的第二列进行排序。第二个排序列导致查询使用临时表,这意味着它必须先收集完整结果才能对其进行排序。这通常是性能下降的根源。

PS:如果您复制并粘贴了文本而不是屏幕截图,那么会更容易看到 EXPLAIN 输出。我必须下载图像并离线查看,以便它可读。

关于mysql - EXPLAIN SELECT 结果的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20790860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com