如何从PHP获取MySQL查询的执行时间?

2022-08-30 14:47:02

我从PHP执行MySQL查询,并想知道它们有多耗时。有没有办法从PHP获取MySQL查询的执行时间?

我还想知道执行时间是否取决于Web服务器的加载方式。我可以想象,如果服务器忙于其他查询,查询将花费更多时间来执行。另一方面,我可以想象,如果服务器繁忙,查询将只等待轮到它,然后它将被执行(没有任何查询并行执行),并且等待时间不包括在执行时间。那么,哪些场景(两种)是正确的呢?


答案 1

可能有一些方法可以通过MySQL来做到这一点,但是,简单(和可靠)的方法是使用PHP的函数,它将当前时间以毫秒为单位返回。microtime

microtime() 返回带有微秒的当前 Unix 时间戳。此函数仅在支持 gettimeofday() 系统调用的操作系统上可用>。

getasfloat - 在没有可选参数的情况下调用时,此函数返回字符串“msec sec”,其中sec是自Unix Epoch(1970年1月1日GMT0:00:00)以来以秒数测量的当前时间,msec是微秒部分。字符串的两个部分都以秒为单位返回。

如果可选get_as_float设置为 TRUE,则返回浮点数(以秒为单位)。

一些示例代码:

$sql = '...';
$msc = microtime(true);
mysql_query($sql);
$msc = microtime(true)-$msc;
echo $msc . ' s'; // in seconds
echo ($msc * 1000) . ' ms'; // in millseconds

答案 2

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';

推荐