30

PHPからMySQLクエリを実行し、それらがどれほど時間がかかるか知りたいです。PHPからMySQLクエリの実行時間を取得する方法はありますか?

また、実行時間はWebサーバーの負荷に依存するのではないかと思います。サーバーが他のクエリでビジー状態の場合、クエリの実行に時間がかかることが想像できます。一方、サーバーがビジー状態の場合、クエリは順番を待ってから実行され(クエリを並行して実行せずに)、待機時間は実行時間に含まれないと想像できます。 。では、どのシナリオ(2つのうち)が正しいのでしょうか?

4

3 に答える 3

61

MySQL を介してこれを行う方法はおそらくいくつかありますが、簡単な (そして信頼できる) 方法はmicrotime、現在の時間をミリ秒単位で返す PHP の関数を使用することです。

microtime()は、現在の Unix タイムスタンプをマイクロ秒単位で返します。> この関数は、gettimeofday() システム コールをサポートするオペレーティング システムでのみ使用できます。

getasfloat - オプションの引数なしで呼び出された場合、この関数は文字列 "msec sec" を返します。ここで、sec は Unix エポック (1970 年 1 月 1 日 0:00:00 GMT) からの秒数で測定された現在の時刻であり、msec はマイクロ秒の部分。文字列の両方の部分が秒単位で返されます。

オプションの get_as_float が TRUE に設定されている場合、float (秒単位) が返されます。

いくつかのコード例:

$sql = '...';
$msc = microtime(true);
mysql_query($sql);
$msc = microtime(true)-$msc;
echo $msc . ' s'; // in seconds
echo ($msc * 1000) . ' ms'; // in millseconds
于 2010-12-21T17:09:47.397 に答える
10

microtime()実行に時間がかかります。mysqlから直接データを取得したい場合は、これを行います...

mysql_query("SET profiling = 1;");
if (mysql_errno()) { die( "ERROR ".mysql_errno($link) . ": " . mysql_error($link) ); }

$query="SELECT some_field_name FROM some_table_name";
$result = mysql_query($query);
if (mysql_errno()) { die( "ERROR ".mysql_errno($link) . ": " . mysql_error($link) ); }

$exec_time_result=mysql_query("SELECT query_id, SUM(duration) FROM information_schema.profiling GROUP BY query_id ORDER BY query_id DESC LIMIT 1;");
if (mysql_errno()) { die( "ERROR ".mysql_errno($link) . ": " . mysql_error($link) ); }
$exec_time_row = mysql_fetch_array($exec_time_result);

echo "<p>Query executed in ".$exec_time_row[1].' seconds';
于 2013-04-12T21:02:22.107 に答える
-3

MySQL からすぐに取得するには、一般ログを使用できます。

まだオンになっていない場合は、オンにします。

SET GLOBAL general_log = 'ON'; 

クエリを実行した後にデータを表示するには:

SELECT * FROM mysql.general_log;

とりわけ、おそらく phpmyadmin で見たのと同じように、クエリの実行時間を取得します。

于 2010-12-21T17:13:06.303 に答える