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 相关文章推荐
dedecms 制作模板中使用的全局标记图文教程
Mar 11 PHP
php中理解print EOT分界符和echo EOT的用法区别小结
Feb 21 PHP
二招解决php乱码问题
Mar 25 PHP
php使HTML标签自动补全闭合函数代码
Oct 04 PHP
php标签云的实现代码
Oct 10 PHP
php统计时间和内存使用情况示例分享
Mar 13 PHP
php结合web uploader插件实现分片上传文件
May 10 PHP
PHP _construct()函数讲解
Feb 03 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 PHP
laravel 之 Eloquent 模型修改器和序列化示例
Oct 17 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
Oct 24 PHP
php让json_encode不自动转义斜杠“/”的方法
Apr 27 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代码技巧的小结
2013/06/02 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
关于实现代码语法标亮 dp.SyntaxHighlighter
2007/02/02 Javascript
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
innerText和innerHTML 一些问题分析
2009/05/18 Javascript
javascript遍历控件实例详细解析
2014/01/10 Javascript
JavaScript和CSS交互的方法汇总
2014/12/02 Javascript
vue.js表格分页示例
2016/10/18 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
js闭包用法实例详解
2016/12/13 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
2016/12/27 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
2017/10/27 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
vue调用语音播放的方法
2019/09/27 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
2014/08/15 Python
Python中的fileinput模块的简单实用示例
2015/07/09 Python
Python matplotlib画图实例之绘制拥有彩条的图表
2017/12/28 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
Django单元测试工具test client使用详解
2019/08/02 Python
python web框架中实现原生分页
2019/09/08 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
django的autoreload机制实现
2020/06/03 Python
matplotlib交互式数据光标mpldatacursor的实现
2021/02/03 Python
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
党风廉设责任书
2014/04/16 职场文书
初中学生评语大全
2014/04/24 职场文书
工商局局长个人对照检查材料思想汇报
2014/09/23 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
Nginx动静分离配置实现与说明
2022/04/07 Servers