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+AJAX聊天程序[聊天室]提供下载
Jul 21 PHP
PHP自动选择 连接本地还是远程数据库
Dec 02 PHP
php从右向左/从左向右截取字符串的实现方法
Nov 28 PHP
php文件操作实例代码
May 10 PHP
PHP register_shutdown_function函数的深入解析
Jun 03 PHP
php实现过滤表单提交中html标签的方法
Oct 17 PHP
php采用curl模仿登录人人网发布动态的方法
Nov 07 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
Jun 17 PHP
thinkphp3.2实现上传图片的控制器方法
Apr 28 PHP
用PHP写的一个冒泡排序法的函数简单实例
May 26 PHP
PHP实现的操作数组类库定义与用法示例
May 24 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 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 全局变量范围分析
2009/08/07 PHP
JavaScript效率调优经验
2009/06/04 Javascript
一步一步制作jquery插件Tabs实现过程
2010/07/06 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
2013/01/25 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
js实现分割上传大文件
2016/03/09 Javascript
JS类的定义与使用方法深入探索
2016/11/26 Javascript
简述Angular 5 快速入门
2017/11/04 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
2019/07/26 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
python实现查询IP地址所在地
2015/03/29 Python
Python编程中的异常处理教程
2015/08/21 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
Python中创建字典的几种方法总结(推荐)
2017/04/27 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
2018/01/10 Python
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
Python中logging实例讲解
2019/01/17 Python
Python可变和不可变、类的私有属性实例分析
2019/05/31 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
HTML5 video播放器全屏(fullScreen)方法实例
2015/04/24 HTML / CSS
伦敦一家非常流行的时尚精品店:Oxygen Boutique
2017/01/15 全球购物
IRO美国官网:法国服装品牌
2018/03/06 全球购物
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
安踏官方商城:anta.cn
2019/12/16 全球购物
物流管理应届生求职信
2013/11/07 职场文书
门诊手术室工作制度
2014/01/30 职场文书
团拜会策划方案
2014/06/07 职场文书
授权委托书范文
2014/07/31 职场文书
小学语文继续教育研修日志
2015/11/13 职场文书
python批量创建变量并赋值操作
2021/06/03 Python
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang