6

私のプロジェクトで実行されている実際の Mysql クエリの実行時間を取得したいので、microtime()前後に PHP を実行すると減算が機能しません。

コマンド ラインでクエリを実行すると、結果には次のようなタイミング情報が表示されます。

xxx rows affected in YY sec

PHPを使って同時刻情報を取得する方法。PHP の Mysql 関数を他の SO question Herehereで検索しましたが、同様のものは得られませんでした。mysql_error()のような他の重要な情報をmysql_affected_rows()返すPHP 関数はありませんか? そうでない場合、なぜそこにないのですか?理由はありますか?

誰かが言う -

実行時間を取得する最良の方法は、exec() や system() などのプログラム実行関数を使用することだと思います。

実際の実行時間を返す動作中の PHP コードを持っている人はいますか?

4

1 に答える 1

12

これを試して:

<?php

$host='localhost';
$username='testing';
$password='testing';
$dbname='test';

$DBC = new mysqli($host,$username,$password,$dbname);

$DBC->query('set profiling=1');
$DBC->query('SELECT * FROM abc');
if ($result = $DBC->query("SHOW profiles", MYSQLI_USE_RESULT)) {


    while ($row = $result->fetch_row()) {
        var_dump($row);
    }
    $result->close();
}
if ($result = $DBC->query("show profile for query 1", MYSQLI_USE_RESULT)) {


    while ($row = $result->fetch_row()) {
        var_dump($row);
    }
    $result->close();
}
$DBC->query('set profiling=0');

?>

最初のifステートメントは、次のようにクエリの全体的な実行時間を示します。

array(3) { [0]=>  string(1) "1" [1]=>  string(10) "0.00024300" [2]=>  string(17) "SELECT * FROM abc" }

2 番目のifステートメントは、クエリの詳細な実行時間を示します。mysql 内部プロファイラーを使用しているため、結果は正確である必要があります。

于 2010-10-27T10:26:41.030 に答える