计算查询时间php& Mysql的

时间:2011-11-16 17:37:42

标签: php mysql execution-time

我正在尝试使用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这怎么可能?是否有更好的方法来获取查询执行时间?

由于

3 个答案:

答案 0 :(得分:7)

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

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

传递TRUE值有microtime()返回时间戳作为实际的浮点数,而不是那种愚蠢的字符串格式,一些[真正令人讨厌但准确描述所述人的智能]认为这将是一种有用的返回数据的方法。 / p>

答案 1 :(得分:4)

有时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;

答案 2 :(得分:0)

嗯对我有用 - 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";