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 相关文章推荐
JAVA/JSP学习系列之二
Oct 09 PHP
动态新闻发布的实现及其技巧
Oct 09 PHP
php sprintf()函数让你的sql操作更安全
Jul 23 PHP
phpmyadmin 常用选项设置详解版
Mar 07 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
Dec 06 PHP
PHP中如何调用webservice的实例参考
Apr 25 PHP
学习php设计模式 php实现状态模式
Dec 07 PHP
php while循环控制的简单实例
May 30 PHP
PHP+MYSQL实现读写分离简单实战
Mar 13 PHP
PHP基于新浪IP库获取IP详细地址的方法
May 04 PHP
PHP实现微信红包金额拆分试玩的算法示例
Apr 07 PHP
PHP+redis实现微博的拉模型案例详解
Jul 10 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学习资源和链接.
2006/12/05 PHP
PHP 远程关机实现代码
2009/11/10 PHP
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
PHP获取服务器端信息的方法
2014/11/28 PHP
php中的动态调用实例分析
2015/01/07 PHP
对比分析php中Cookie与Session的异同
2016/02/19 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
2019/05/29 PHP
Laravel开启跨域请求的方法
2019/10/13 PHP
用jscript启动sqlserver
2007/06/21 Javascript
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
网站页面自动跳转实现方法PHP、JSP(上)
2010/08/01 Javascript
jQuery实现原理的模拟代码 -6 代码下载
2010/08/16 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
2013/04/17 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
2015/04/03 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
2016/11/07 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
Vue导出页面为PDF格式的实现思路
2018/07/31 Javascript
JavaScript组合模式---引入案例分析
2020/05/23 Javascript
[01:38]完美世界DOTA2联赛(PWL)宣传片:第一站
2020/10/26 DOTA
python中异常报错处理方法汇总
2016/11/20 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
用python对excel查重
2020/12/07 Python
C语言开发工程师测试题
2016/12/20 面试题
如何通过jdbc调用存储过程
2012/04/19 面试题
创业计划书如何吸引他人眼球
2014/01/10 职场文书
搞笑爱情保证书
2014/04/29 职场文书
语文教育专业求职信
2014/06/28 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
2014年司法所工作总结
2014/11/22 职场文书
铁路安全反思材料
2014/12/24 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
MySQL 语句执行顺序举例解析
2022/06/05 MySQL