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下获取客户端ip地址的函数
Mar 15 PHP
解析在apache里面给php写虚拟目录的详细方法
Jun 24 PHP
php 解压rar文件及zip文件的方法
May 05 PHP
在PHP中运行Linux命令并启动SSH服务的例子
Jun 12 PHP
php批量删除数据库下指定前缀的表以prefix_为例
Aug 24 PHP
Thinkphp调用Image类生成缩略图的方法
Mar 07 PHP
PHP5.3以上版本安装ZendOptimizer扩展
Mar 27 PHP
浅谈PHP eval()函数定义和用法
Jun 21 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
Sep 22 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
Jun 15 PHP
PHP 模拟登陆功能实例详解
Sep 10 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
Apr 06 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/10/09 PHP
用PHP制作静态网站的模板框架(一)
2006/10/09 PHP
php学习笔记之基础知识
2014/11/08 PHP
浅谈PHP中的
2016/04/23 PHP
php的4种常用运行方式详解
2016/12/22 PHP
javascript 函数调用的对象和方法
2010/07/01 Javascript
非主流的textarea自增长实现js代码
2011/12/20 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
2014/06/05 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
JavaScript实现向右伸出的多级网页菜单效果
2015/08/25 Javascript
jquery限定文本框只能输入数字(整数和小数)
2016/01/08 Javascript
AngularJS 实现弹性盒子布局的方法
2016/08/30 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
微信小程序实现弹幕墙(祝福墙)
2020/11/18 Javascript
Django中的CACHE_BACKEND参数和站点级Cache设置
2015/07/23 Python
centos6.7安装python2.7.11的具体方法
2017/01/16 Python
深入理解Python 关于supper 的 用法和原理
2018/02/28 Python
基于MTCNN/TensorFlow实现人脸检测
2018/05/24 Python
Python使用turtle库绘制小猪佩奇(实例代码)
2020/01/16 Python
Python中格式化字符串的四种实现
2020/05/26 Python
乐高官方旗舰店:LEGO积木玩具
2019/04/06 全球购物
一个精品风格的世界:Atterley
2019/05/01 全球购物
JMS中Topic和Queue有什么区别
2013/05/15 面试题
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
宣传保护环境的公益广告词
2014/03/13 职场文书
学校安全生产月活动总结
2014/07/05 职场文书
购房委托书范本
2014/09/18 职场文书
使用python+pygame开发消消乐游戏附完整源码
2021/06/10 Python
python异常中else的实例用法
2021/06/15 Python
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle