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表記」を使用する場合があります。これを回避したい場合は、次のようにラウンド関数を使用できます。

$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 に答える