【问题标题】:Query time result in MySQL w/ PHP使用 PHP 在 MySQL 中查询时间结果
【发布时间】:2011-07-13 04:17:27
【问题描述】:

有没有一种方法可以获取 MySQL 查询的时间(特别是使用 PHP)?即完成查询所用的实际时间。

诸如:棕色的结果 1 - 10。 (0.11 秒)

我试图寻找一个例子,但无济于事。这是我的代码示例:

                    // prepare sql statement
                $stmt = $dbh->prepare("SELECT ijl, description, source, user_id, timestamp FROM Submissions WHERE MATCH (ijl, description) AGAINST (?)");

                // bind parameters
                $stmt->bindParam(1, $search, PDO::PARAM_STR);

                // execute prepared statement
                $stmt->execute();

对于我当前使用 MyISAM 表引擎的全文搜索。任何帮助都会令人难以置信。谢谢。

【问题讨论】:

  • 只是提到返回的时间是以秒为单位的,而不是微秒,所以一个数字例如0.0412356 大约是二五分之一秒,而不是 4 x 10 exp -8 。

标签: php mysql time myisam


【解决方案1】:
$starttime = microtime(true);

//Do your query and stuff here

$endtime = microtime(true);
$duration = $endtime - $starttime; //calculates total time taken

注意,由于get_as_float 参数为真,这将为您提供(不是微秒)到最接近的微秒的运行时间。见this

【讨论】:

  • 这个问题是当我得到 0.1 结果这意味着查询运行了 0.000001 秒,这有点太快了
  • @erdomester 这是因为答案中的错误。 microtime(true) 返回秒而不是微秒。我已经编辑了答案。
【解决方案2】:

我现在可以告诉你两种可能性:

  • 用 microtime() 包装 ->execute() 并自行测量,可能将整个“查询”代码 sn-p 包装在一个类/函数中
  • 对该查询运行 EXPLAIN 查询,看看是否可以从返回的数据中读取一些值

希望对您有所帮助。

【讨论】:

  • 谢谢,确实如此。 EXPLAIN 是给出完成所需的实际时间,还是只是估计所需时间?另外,让 PHP 处理它并制作一个计数器(如上面建议的 rayman)会不会减少开销?
  • PHP 解决方案为您提供完成此类任务所需的总时间,但 SQL 解决方案为您提供数据库在准备目标数据集时消耗的确切时间。
【解决方案3】:

如果你使用的是 MYSQL 5,你最好检查一下 SHOW PROFILE

http://dev.mysql.com/doc/refman/5.0/en/show-profile.html

并在 php 中打印时间...或解释耗时更长的 SQL 语句或详细说明每个查询...按 CPU 等

【讨论】:

【解决方案4】:

这可能对你有帮助

http://dev.mysql.com/doc/refman/5.0/en/show-profile.html

mysql> SET profiling = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> DROP TABLE IF EXISTS t1;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CREATE TABLE T1 (id INT);
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW PROFILES;
+----------+----------+--------------------------+
| Query_ID | Duration | Query                    |
+----------+----------+--------------------------+
|        0 | 0.000088 | SET PROFILING = 1        |
|        1 | 0.000136 | DROP TABLE IF EXISTS t1  |
|        2 | 0.011947 | CREATE TABLE t1 (id INT) |
+----------+----------+--------------------------+

问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 2011-06-01
    • 2015-03-29
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多