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 COOKIE设置为浏览器进程
Jun 21 PHP
PHP中全局变量global和$GLOBALS[]的区别分析
Aug 06 PHP
PHP 伪静态技术原理以及突破原理实现介绍
Jul 12 PHP
Fedora下安装php Redis扩展笔记
Sep 03 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
Sep 06 PHP
PHP安全上传图片的方法
Mar 21 PHP
php计算年龄精准到年月日
Nov 17 PHP
PHP中FTP相关函数小结
Jul 15 PHP
PHP数组相加操作及与array_merge的区别浅析
Nov 26 PHP
PHP 断点续传实例详解
Nov 11 PHP
php插入mysql数据返回id的方法
May 31 PHP
Laravel 模型使用软删除-左连接查询-表起别名示例
Oct 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面向对象程序设计OOP继承用法入门示例
2016/12/27 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
JavaScript之编码规范 推荐
2012/05/23 Javascript
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
JSON中双引号的轮回使用过程中一定要小心
2014/03/05 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
深入浅析knockout源码分析之订阅
2016/07/12 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
原生js实现电商侧边导航效果
2017/01/19 Javascript
详解Vue2.0之去掉组件click事件的native修饰
2017/04/20 Javascript
JavaScript实现的DOM绘制柱状图效果示例
2018/08/08 Javascript
深入理解es6块级作用域的使用
2019/03/28 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
JavaScript对象属性操作实例解析
2020/02/04 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
2020/06/19 Javascript
[01:06]DOTA2小知识课堂 Ep.02 吹风竟可解梦境缠绕
2019/12/05 DOTA
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
Python中将两个或多个list合成一个list的方法小结
2019/05/12 Python
anaconda如何查看并管理python环境
2019/07/05 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
python爬虫把url链接编码成gbk2312格式过程解析
2020/06/08 Python
keras分类模型中的输入数据与标签的维度实例
2020/07/03 Python
Python如何读写二进制数组数据
2020/08/01 Python
基于python图书馆管理系统设计实例详解
2020/08/05 Python
Python面向对象实现方法总结
2020/08/12 Python
美国著名手表网站:Timepiece
2017/11/15 全球购物
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
德国珠宝和配件商店:Styleserver
2021/02/23 全球购物
会计系个人求职信范文分享
2013/12/20 职场文书
2014年文员工作总结
2014/11/18 职场文书
Python自动化之批量处理工作簿和工作表
2021/06/03 Python
python绘制简单直方图(质量分布图)的方法
2022/04/21 Python