3

我正在尝试使用 php 脚本计算查询运行所需的时间:

例如:

$sql = "SELECT COUNT(*) FROM `order_items` LEFT JOIN `orders` ON `oi_o_id` = `o_id` WHERE `o_status` = 'completed' AND `oi_p_id` = '10' LIMIT 1";
$sqlStart = getMicroTime();
$result = mysql_query($sql);
$sqlEnd = getMicroTime();
$sqlTime = $sqlEnd - $sqlStart;

echo $sqlTime;

function getMicroTime() {
    list($msec, $sec) = explode(' ', microtime());
    return floor($sec / 1000) + $msec;
}

这似乎在大多数情况下都有效,但偶尔我会得到一个负值,例如-0.98840499995276. 这怎么可能?有没有更好的方法来获取查询执行时间?

谢谢

4

3 回答 3

8

您的微时间功能不是必需的,只需执行

$start = microtime(TRUE);
... do query
$end = microtime(TRUE);

传入 TRUE 值使 microtime() 将时间戳作为实际浮点数返回,而不是某些 [确实令人讨厌但准确描述所述人的智力] 认为将是返回数据的有用方式的那种愚蠢的字符串格式。

于 2011-11-16T17:40:58.277 回答
5

有时 PHP 使用“E 表示法”来表示浮点数:如果你想避免这种情况,你可以这样使用 round 函数:

$start_time = (float) round(microtime(true) * 10000,0);
{your code here}
$finish_time = (float) round(microtime(true) * 10000,0);
$time = ($finish_time - $start_time) / 10000;
于 2013-03-16T18:32:14.673 回答
1

嗯对我有用 - PHP 手册确实这么说。你检查过子时空异常吗:-)

This function is only available on operating systems that support the gettimeofday() system call. 

还尝试了 PHP 手册中的替代方法

$time_start = microtime(true);

// Sleep for a while
usleep(100);

$time_end = microtime(true);
$time = $time_end - $time_start;

echo "Did nothing in $time seconds\n";
于 2011-11-16T17:45:11.023 回答