Я видел этот вопрос в Интернете ( здесь и здесь , например), но я никогда не видел хорошего ответа. Возможно ли найти время, в течение которого заданный MySQL-запрос (выполняемый через mysql_query) принимается через PHP?
В некоторых местах рекомендуется использовать функцию microtime
php, но похоже, что она может быть неточной. mysql_query
может увязнуть с задержкой в сети или вялой системой, которая не реагирует на ваш запрос быстро или какой-либо другой несвязанной причиной. Ни одно из них напрямую не связано с качеством вашего запроса, и это единственное, что я действительно хочу проверить здесь. (Пожалуйста, укажите в комментариях, если вы не согласны!)
Я только проверяю качество самого запроса, а затем удаляю PHP из уравнения. Используйте такой инструмент, как MySQL Query Browser или SQLyog .
Или, если у вас есть доступ к оболочке, просто подключитесь напрямую. Любой из этих методов будет лучше определять фактическую производительность ваших запросов.
Мой ответ подобен, но разнообразен. Запишите время до и после запроса, но сделайте это в своем классе запросов к базе данных. О, вы говорите, что используете mysql_query напрямую? Итак, теперь вы знаете, почему вы должны использовать оболочку класса вокруг этих функций raw php database (pardon the snark). На самом деле, один уже построен под названием PDO:
Если вы хотите расширить функциональность, чтобы делать выборку вокруг каждого из ваших запросов … расширьте класс! Достаточно просто, не так ли?
На уровне php вам нужно будет записать время до и после запроса.
Если вы заботитесь только о производительности запроса, вы можете включить медленный журнал запросов на вашем сервере mysql: http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html. Это будет регистрировать все запросов дольше указанного количества секунд.
Если вам действительно нужна информация о запросе, возможно, вы можете использовать SHOW PROFILES:
http://dev.mysql.com/doc/refman/5.0/en/show-profiles.html
Лично я бы использовал комбинацию microtime-ing, медленного журнала запросов, mytop и анализа проблемных запросов с клиентом MySQL (командной строки).