【问题标题】:Is there a good tool for MySQL that will help me optimise my queries and index settings? [closed]是否有一个很好的 MySQL 工具可以帮助我优化查询和索引设置? [关闭]
【发布时间】:2021-07-05 21:55:47
【问题描述】:

我在一个相当复杂的网站(PHP 驱动)中使用 MySQL。

理想情况下,我可以使用一个工具来帮助我测试我正在使用的 SQL 查询并建议更好的表索引,从而提高性能并避免表扫描。

如果做不到这一点,它会告诉我每个查询的确切内容,因此我可以自己执行优化。

编辑:理解 EXPLAIN ... 输出的简单指南也会很有用。

谢谢。

【问题讨论】:

    标签: mysql optimization


    【解决方案1】:

    这里有一些关于 EXPLAIN 的信息(引用自 O'Reilly 的高性能 MySQL 书):

    当您对查询运行 EXPLAIN 时,它会以查询中涉及的每个表的报告的形式告诉您 MySQL 所知道的关于该查询的所有信息。

    这些报告中的每一个都会告诉您...

    • 表的 ID(在查询中)
    • 表在较大选择中的作用(如果适用,如果只有一个表,可能会说 SIMPLE)
    • 表的名称 (duh)
    • 连接类型(如果适用,默认为 const
    • 表上的索引列表(如果没有,则为 NULL),possible_keys
    • MySQL 决定使用的索引的名称,key
    • 键值的大小(以字节为单位)
    • ref 显示用于匹配键的列或值
    • rows 是 MySQL 认为它需要检查以满足查询的行数。 这应该尽可能接近您计算出的最小值!
    • ...然后是 MySQL 希望传达的任何额外信息

    这本书在提供这样的信息方面非常棒,所以如果你还没有,让你的老板签字同意购买。

    否则,我希望一些知识渊博的 SO 用户可以提供帮助:)

    【讨论】:

      【解决方案2】:

      作为最简单的事情,启用慢查询日志并查看哪些查询很慢,然后尝试按照建议进行分析。

      【讨论】:

        【解决方案3】:

        那里可能有查询分析器,但首先要简单介绍一下 使用 mysql 命令行,然后输入“explain select * from foo where bar = 'abc'”。确保您最常见的查询使用索引,尽量避免顺序扫描或大表排序。

        【讨论】:

        • 我过去曾尝试过解释,但从未真正理解输出。我已经更新了问题以反映这一点。
        【解决方案4】:

        EverSQL https://www.eversql.com

        它将分析您的慢查询并生成索引并为您提供一些提示。

        【讨论】:

          【解决方案5】:

          您应该查看Maatkit,这是一个用于执行各种 MySQL 任务的开源工具包。如果没有关于您要调整的确切内容的更多信息,很难告诉您将使用哪些工具以及如何使用,但是文档非常好,并且涵盖了很多应用程序。

          【讨论】:

            【解决方案6】:

            我用于其余 sql 调整的工具 (SQLyog) 有一个包含分析器的新版本,太棒了! (我不为他们工作——我只是使用他们的产品)

            http://www.webyog.com/en/screenshots_sqlyog.php

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-05-25
              • 2011-04-03
              相关资源
              最近更新 更多