我从 PHP 执行 MySQL 查询,想知道它们有多耗时。有没有办法从 PHP 获取 MySQL 查询的执行时间?
我还想知道执行时间是否取决于 Web 服务器的负载情况。我可以想象,如果服务器忙于其他查询,查询将需要更多时间来执行。另一方面,我可以想象,如果服务器很忙,查询将等待轮到它然后它会被执行(没有任何并行执行的查询)并且等待时间不包括在执行时间中. 那么,哪些情况(两种情况中)是正确的?
我从 PHP 执行 MySQL 查询,想知道它们有多耗时。有没有办法从 PHP 获取 MySQL 查询的执行时间?
我还想知道执行时间是否取决于 Web 服务器的负载情况。我可以想象,如果服务器忙于其他查询,查询将需要更多时间来执行。另一方面,我可以想象,如果服务器很忙,查询将等待轮到它然后它会被执行(没有任何并行执行的查询)并且等待时间不包括在执行时间中. 那么,哪些情况(两种情况中)是正确的?
通过 MySQL 可能有一些方法可以做到这一点,但是,简单(可靠)的方法是使用 PHP 的microtime
函数,它以毫秒为单位返回当前时间。
microtime()以微秒为单位返回当前的 Unix 时间戳。此函数仅在支持 gettimeofday() 系统调用的操作系统上可用。
getasfloat - 当不带可选参数调用时,此函数返回字符串“msec sec”,其中 sec 是以 Unix 纪元(格林威治标准时间 1970 年 1 月 1 日 0: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
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';
要从 MySQL 中直接获取它,您可以使用通用日志。
如果它尚未打开,请将其打开:
SET GLOBAL general_log = 'ON';
要在运行查询后查看数据:
SELECT * FROM mysql.general_log;
除其他外,您将获得查询执行时间,就像您可能在 phpmyadmin 中看到的一样。