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