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 相关文章推荐
PHP的面试题集,附我的答案和分析(一)
Nov 19 PHP
PHP5中的时间相差8小时的解决办法
Mar 28 PHP
php 进度条实现代码
Mar 10 PHP
php XMLWriter类的简单示例代码(RSS输出)
Sep 30 PHP
浅谈apache和nginx的rewrite的区别
Feb 22 PHP
教你如何用php实现LOL数据远程获取
Jun 10 PHP
PHP实现下载断点续传的方法
Nov 12 PHP
php递归遍历删除文件的方法
Apr 17 PHP
php动态绑定变量的用法
Jun 16 PHP
PHP环境中Memcache的安装和使用
Nov 05 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
Feb 06 PHP
如何在PHP中使用AES加密算法加密数据
Jun 24 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解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
2014/11/04 PHP
PHP实现的简单日历类
2014/11/29 PHP
PHP实现动态压缩js与css文件的方法
2018/05/02 PHP
基于PHP实现邮箱验证激活过程详解
2020/10/28 PHP
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
2009/02/17 Javascript
一个可以随意添加多个序列的tag函数
2009/07/21 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
JavaScript设计模式之抽象工厂模式介绍
2014/12/28 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
jquery简单插件制作(fn.extend)完整实例
2016/05/24 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
jquery attr()设置和获取属性值实例教程
2016/09/25 Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
2016/10/24 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
2020/04/25 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
Python 条件判断的缩写方法
2008/09/06 Python
Python二进制串转换为通用字符串的方法
2018/07/23 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
python烟花效果的代码实例
2020/02/25 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
使用Python构造hive insert语句说明
2020/06/06 Python
解决html5中的video标签ios系统中无法播放使用的问题
2020/08/10 HTML / CSS
英国在线定制百叶窗网站:Swift Direct Blinds
2020/02/25 全球购物
Tommy Hilfiger澳洲官网:美国高端休闲领导品牌
2020/12/16 全球购物
求最大连续递增数字串(如"ads3sl456789DF3456ld345AA"中的"456789")
2015/09/11 面试题
毕业实习个人鉴定范文
2013/12/10 职场文书
护理中职生求职信范文
2014/02/24 职场文书
明星邀请函
2015/02/02 职场文书
公司开业主持词
2015/07/02 职场文书