Как получить время выполнения запроса MySQL из PHP?

Я выполняю MySQL-запросы с PHP и хотел бы знать, сколько времени они занимают. Есть ли способ получить время выполнения запроса MySQL из PHP?

Я также задаюсь вопросом, зависит ли время выполнения от того, насколько загружен веб-сервер. Я могу представить, что для выполнения запроса потребуется больше времени, если сервер занят другими запросами. С другой стороны, я могу представить, что если сервер занят, запрос будет просто ждать своего хода, а затем он будет выполнен (без каких-либо запросов, выполняемых параллельно), а время ожидания не будет включено во время выполнения , Итак, какие сценарии (из двух) верны?

Вероятно, есть какой-то способ сделать это через MySQL, однако простой (и надежный) способ использует функцию microtime PHP, которая возвращает текущее время в миллисекундах.

microtime () возвращает текущую временную метку Unix с микросекундами. Эта функция доступна только> в операционных системах, поддерживающих системный вызов gettimeofday ().

getasfloat – при вызове без необязательного аргумента эта функция возвращает строку «msec sec», где sec – текущее время, измеренное в секундах от момента Unix Epoch (0:00:00 1 января 1970 года по Гринвичу), а 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.