PHP获取MySQL执行sql语句的查询时间方法


Posted in PHP onAugust 21, 2018

如下所示:

//计时开始
runtime();
 
//执行查询
mysql_query($sql);
 
//计时结束.
echo runtime(1);
 
//计时函数 
function runtime($mode=0) {
 static $t; 
 if(!$mode) { 
  $t = microtime();
  return;
 } 
 $t1 = microtime(); 
 list($m0,$s0) = explode(" ",$t); 
 list($m1,$s1) = explode(" ",$t1); 
 return sprintf("%.3f ms",($s1+$m1-$s0-$m0)*1000);
}

对sql的执行时间进行分析可以:

1,确定sql的书写是否合理,高效

2,检查字段、表的设计是否合理

方法1:在系统底层对sql操作类进行改写,通常类的结构是

业务model ---》 db类 ---》 执行sql

可以根据情况在某阶段进行改写,比如db类;通常会修改

public function execute($sql) {
//code...

/*检测sql执行时间,超过执行时间记录到日志中*/
$start_time = array_sum(explode(' ', microtime()));

$this->lastresult = mysql_query($sql,$this->link) or $this->displayerror($sql);

$end_time = array_sum(explode(' ', microtime()));
$differ = $end_time - $start_time;
if($differ >0.001){    //修改时间范围,单位:秒
 putContent('sqlLOG', date('Y-m-d H:i:s', $start_time)." "
  . date('Y-m-d H:i:s', $end_time)." "
  .$differ. " ".$sql."\r\n");
}


//code...
}

引用:

phpmyadmin中的代码,获得query执行时间如下:

// garvin: Measure query time.
// TODO-Item http://sourceforge.net/tracker/index.php?func=detail&aid=571934&group_id=23067&atid=377411

$querytime_before = array_sum(explode(' ', microtime()));
$result = @PMA_DBI_try_query($full_sql_query, null, PMA_DBI_QUERY_STORE);
$querytime_after = array_sum(explode(' ', microtime()));
$GLOBALS['querytime'] = $querytime_after - $querytime_before;

除了这种方式还可以使用mysql的profile。

这个更适合统计多条sql的执行情况。

我见过好像是一个博客,访问页面之后会有一个提示大概说共查询了几次数据库,用了多长时间查询数据,那么开启mysql的profile就可以轻松实现了。

批注1:micortime函数

计算微秒的函数micortime(),可以返回当前UNIX时间戳和微秒数。返回浮点数单位为秒。不过函数仅在支持gettimeofday()系统调用的操作系统下可用。可以查下手册详细了解下。可能引发有些不明的错误,注意。

批注2:profile最多保存100条记录,这个要怎么解决呢?

profiling_history_size
The number of statements for which to maintain profiling information if profiling is enabled. The default value is 15. The maximum value is 100. Setting the value to 0 effectively disables profiling.

这个最大就100条了,改不了。

引用2:PHP获取毫秒级时间戳的方法

java里面可以通过gettime();获取。如果是要与java写的某些程序进行高精度的毫秒级的对接通信,则需要使用PHP输出毫秒级的时间。为获取更为精准的毫秒级时间戳可以使用下面的代码:

<?php
function getMillisecond() {
list($t1, $t2) = explode(' ', microtime());
return (float)sprintf('%.0f',(floatval($t1)+floatval($t2))*1000);
}
echo getMillisecond();

运行结果:1.46647658229E+12

以上这篇PHP获取MySQL执行sql语句的查询时间方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
[FAQ]PHP中的一些常识:类篇
Oct 09 PHP
一个PHP+MSSQL分页的例子
Oct 09 PHP
php下将XML转换为数组
Jan 01 PHP
php中理解print EOT分界符和echo EOT的用法区别小结
Feb 21 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
Jul 07 PHP
PHP大转盘中奖概率算法实例
Oct 21 PHP
php中smarty实现多模版网站的方法
Jun 11 PHP
PHP常见数组函数用法小结
Mar 21 PHP
PHP读取大文件的多种方法介绍
Apr 04 PHP
php中preg_replace_callback函数简单用法示例
Jul 21 PHP
PHP简单读取xml文件的方法示例
Apr 20 PHP
PHP如何防止XSS攻击与XSS攻击原理的讲解
Mar 22 PHP
php ajax数据传输和响应方法
Aug 21 #PHP
Ajax请求PHP后台接口返回信息的实例代码
Aug 21 #PHP
php从数据库读取数据,并以json格式返回数据的方法
Aug 21 #PHP
php从数据库中获取数据用ajax传送到前台的方法
Aug 20 #PHP
PHP常见数组排序方法小结
Aug 20 #PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
Aug 20 #PHP
PHP数组常用函数实例小结
Aug 20 #PHP
You might like
php 判断服务器操作系统的类型
2014/02/17 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
PHP简单遍历对象示例
2016/09/28 PHP
PHP环境搭建(php+Apache+mysql)
2016/11/14 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
网页的标准,IMG不支持onload标签怎么办
2006/06/29 Javascript
JS文本框不能输入空格验证方法
2013/03/19 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
file控件选择上传文件确定后触发的js事件是哪个
2014/03/17 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
Node.js 条形码识别程序构建思路详解
2016/02/14 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
Angular.js之作用域scope'@','=','&amp;'实例详解
2017/02/28 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
node.js基于socket.io快速实现一个实时通讯应用
2019/04/23 Javascript
解决vue请求接口第一次成功,第二次失败问题
2020/09/08 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
Python实现发送email的几种常用方法
2014/08/18 Python
Python数据类型详解(一)字符串
2016/05/08 Python
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
python中reader的next用法
2018/07/24 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
使用Python求解带约束的最优化问题详解
2020/02/11 Python
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
.NET初级开发工程师面试题(包括Javascript)
2012/08/22 面试题
商场端午节活动方案
2014/01/29 职场文书
飘柔洗发水广告词
2014/03/14 职场文书
新党章心得体会
2014/09/04 职场文书
房屋维修协议书范本
2014/09/25 职场文书
求职导师推荐信范文
2015/03/27 职场文书
给男朋友的道歉短信
2015/05/12 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL