【问题标题】:How to check performance of mysql query?如何检查mysql查询的性能?
【发布时间】:2015-11-14 00:52:22
【问题描述】:

我一直在学习查询优化,提高查询性能,但总的来说,如果我们创建一个查询,我们如何知道这是否是一个明智的查询。

我知道我们可以在下面看到执行时间,但是如果没有大量数据,这个时间不会给出明确的指示。通常,当我们创建一个新查询时,我们没有太多数据要检查。

我已经了解了子句和命令的性能。但是有什么东西可以用来检查查询的性能吗?这里的性能不是执行时间,它表示查询是否“ok”,不依赖数据。

因为我们无法在实时数据库中创建那么多数据。

【问题讨论】:

  • 你知道......这个世界上没有什么是完美的...... :) “过早的优化是万恶之源”
  • 在学习查询优化时,您应该了解的最重要的事情之一是“正确的”查询始终依赖于数据。虽然查询 A 在小型数据集上的性能可能比查询 B 好,但在大型数据集上可能正好相反。
  • 查询优化就像艺术你需要了解MySQL引擎的某些部分。 MySQL 查询优化器可以更改对已更改数据的查询执行计划,对于 JOINS 始终如此。 MySQL Query Optimizer 可以访问wrong order 中的表注意,当您不使用 GOUP BY 或 ORDER BY 时,这还不错。但是如果你这样做,MYSQL 需要使用临时表和文件排序来获得正确的结果,这会降低查询的性能。
  • @Devart - 您的商业产品如何教 OP 如何学习查询优化?
  • @N.B.它是一个工具,它不是手册。该工具将允许简单快速地更改查询、测量性能和查看结果。所以,它甚至可以教。

标签: mysql sql database database-design


【解决方案1】:

可以使用 MySQL 中的 EXPLAIN 命令检查查询的一般性能。见https://dev.mysql.com/doc/refman/5.7/en/using-explain.html

它向您展示 MySQL 引擎如何计划执行查询,并允许您进行一些基本的健全性检查,即引擎是否将使用键和索引来执行查询,查看 MySQL 将如何执行连接(即,如果外键是'没有丢失)等等。

您可以在此处找到一些关于如何使用 EXPLAIN 优化查询的一般提示(以及一些不错的示例):http://www.sitepoint.com/using-explain-to-write-better-mysql-queries/

【讨论】:

    【解决方案2】:

    如上所述,右查询始终为data-dependent。在某种程度上,您可以使用以下方法来检查性能

    1. 您可以使用Explain 了解查询执行计划,这可能会帮助您纠正一些问题。欲了解更多信息: 参考文档Optimizing Queries with EXPLAIN

    2. 您可以使用Query Analyzer。参考MySQL Query Analyzer

    【讨论】:

    • 解释一下我已经知道了,但是查询分析器非常有帮助,谢谢:)
    【解决方案3】:

    我喜欢将my cookbook 扔给新手,因为他们通常不了解INDEXes 的重要性,或者不知道其中的一些微妙之处。

    在尝试多种查询/模式选择时,我喜欢使用

    FLUSH STATUS;
    SELECT ...;
    SHOW SESSION STATUS LIKE 'Handler%';
    

    计算低级别操作,例如“读取下一条记录”。它从根本上消除了缓存问题、磁盘速度等问题,并且非常具有可重复性。通常,该输出中有一个计数器(或多个计数器)与表中的行数匹配(有时为 +/-1)——这告诉我有表扫描。这通常不如使用一些INDEX。如果查询有LIMIT,则该值可能会显示在某个处理程序中。

    一个非常糟糕的查询,例如 CROSS JOIN,会显示 N*M 的值,其中 N 和 M 是两个表的行数。

    我使用 Handler 技术来“证明”几乎所有已发布的“给我随机行”技术都需要表扫描。然后我可以尝试使用小表和处理程序来得出faster random routines 的列表。

    计时时的另一个提示...关闭 Query_cache(或使用SELECT SQL_NO_CACHE)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-06
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多