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中接口与抽象类的区别
Jun 08 PHP
深入理解PHP中的Session和Cookie
Jun 21 PHP
php 获取本地IP代码
Jun 23 PHP
php的ajax简单实例
Feb 27 PHP
PHP入门经历和学习过程分享
Apr 11 PHP
php读取目录及子目录下所有文件名的方法
Oct 20 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
Dec 14 PHP
基于PHP实现通过照片获取ip地址
Apr 26 PHP
PHP+MySQL存储数据常见中文乱码问题小结
Jun 13 PHP
PHP解决中文乱码
Apr 28 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
PHP 枚举类型的管理与设计知识点总结
Feb 13 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 socket(fsockopen)的应用实例分析
2013/06/02 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
php环境套包 dedeampz 伪静态设置示例
2014/03/26 PHP
Laravel 5 框架入门(四)完结篇
2015/04/09 PHP
javascript 弹出层组件(升级版)
2011/05/12 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
jquery 循环显示div的示例代码
2013/10/18 Javascript
JavaScript禁止页面操作的示例代码
2013/12/17 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
Bootstrap图片轮播组件使用实例解析
2016/06/30 Javascript
Javascript 6里的4个新语法
2016/08/25 Javascript
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
2017/04/21 Javascript
基于Vue过渡状态实例讲解
2017/09/14 Javascript
微信小程序中换行空格(多个空格)写法详解
2018/07/10 Javascript
ES6 系列之 Generator 的自动执行的方法示例
2018/10/19 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
python中时间模块的基本使用教程
2019/05/14 Python
浅谈python 中类属性共享的问题
2019/07/02 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
2019/12/27 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
python中列表的含义及用法
2020/05/26 Python
使用keras内置的模型进行图片预测实例
2020/06/17 Python
HTML5 新事件 小结
2009/07/16 HTML / CSS
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
ASOS西班牙官网:英国在线时尚和美容零售商
2020/01/10 全球购物
同步和异步有何异同,在什么情况下分别使用他们
2013/04/09 面试题
有个性的自我评价范文
2013/11/15 职场文书
副总经理岗位职责
2014/03/16 职场文书
2015年小学数学教研组工作总结
2015/05/21 职场文书
优秀学生干部主要事迹材料
2015/11/04 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang
Python查找算法的实现 (线性、二分,分块、插值查找算法)
2022/04/24 Python