【问题标题】:How to check how long MySQL query is taking?如何检查 MySQL 查询需要多长时间?
【发布时间】:2012-07-28 22:54:35
【问题描述】:

当我运行查询时,我不希望它打印到控制台。 我只是想看看时间。

9166 rows in set (0.90 sec)

这就是我想要看到的一切,而不是打印所有内容。

【问题讨论】:

    标签: mysql database indexing


    【解决方案1】:

    试试这个简单的例子

    mysql> set profiling=1;
    mysql> select count(*) from comment;
    mysql> select count(*) from message;
    mysql> show profiles;
    
    +----------+------------+------------------------------+
    | Query_ID | Duration   | Query                        |
    +----------+------------+------------------------------+
    |        1 | 0.00012700 | select count(*) from comment |
    |        2 | 0.00014200 | select count(*) from message |
    +----------+------------+------------------------------+
    2 rows in set (0.00 sec)
    

    【讨论】:

    • 警告:5.6.7 变更日志显示“SHOW PROFILESHOW PROFILES 语句。请改用性能架构;请参阅 MySQL Performance Schema。”
    • @RickJames,看起来你的链接有点不对劲。他们都链接到dev.mysql.comhttps//dev.mysql.com/path
    • 奇怪。去掉“http”之前的冗余信息。
    【解决方案2】:

    您可以使用COUNT 在子查询中编写您的查询,以达到以下目的:

    SELECT COUNT(1)
    FROM ( SELECT * FROM your_table WHERE ...) a
    

    它可能会稍微减慢您的查询速度,因为它也在做COUNT,但我认为它可以忽略不计。

    为了测量查询的性能,您可以在 MySQL 中打开PROFILES

    SET profiling = 1;
    

    有关PROFILES 的更多详细信息,请参阅here

    【讨论】:

    • 它说“ERROR 1248 (42000): 每个派生表都必须有自己的别名”?
    • 为派生表提供任何别名,因为我在末尾给出了“a”
    【解决方案3】:
    $starttime = microtime(true);
    
    //Do your query and stuff here
    
    $endtime = microtime(true);
    $duration = $endtime - $starttime; //calculates total time taken
    

    【讨论】:

    • 这种方法对 PHP 很好。但是,请注意,经过的时间将包括客户端和服务器之间的往返时间。通过做一些琐碎的事情来检查有多少时间,比如SELECT 1;
    猜你喜欢
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 2017-05-14
    相关资源
    最近更新 更多