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 相关文章推荐
实现树状结构的两种方法
Oct 09 PHP
php中的数组操作函数整理
Aug 18 PHP
PHP生成HTML静态页面实例代码
Aug 31 PHP
更改localhost为其他名字的方法
Feb 10 PHP
Smarty中常用变量操作符汇总
Oct 27 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
Dec 18 PHP
PHP批量生成图片缩略图的方法
Jun 18 PHP
PHP简单的MVC框架实现方法
Dec 01 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
May 16 PHP
Thinkphp框架开发移动端接口(2)
Aug 18 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
Dec 25 PHP
Laravel框架实现的记录SQL日志功能示例
Jun 19 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 chmod 函数与批量修改文件目录权限
2010/05/10 PHP
PHP 一个随机字符串生成代码
2010/05/26 PHP
一个简单php扩展介绍与开发教程
2010/08/19 PHP
php实现读取内存顺序号
2015/03/29 PHP
php对数组内元素进行随机调换的方法
2015/05/12 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
2016/01/07 PHP
PHP写的简单数字验证码实例
2017/05/23 PHP
JavaScript 继承详解(三)
2009/07/13 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
2013/11/06 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
JavaScript中的call和apply的用途以及区别
2017/01/11 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
React Native悬浮按钮组件的示例代码
2018/04/05 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
2018/09/01 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
微信小程序可滑动月日历组件使用详解
2019/10/21 Javascript
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
[01:01:24]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
Python中%r和%s的详解及区别
2017/03/16 Python
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
借助HTML5 Canvas API制作一个简单的猜字游戏
2016/03/25 HTML / CSS
英国儿童设计师服装的领先零售商:Base
2019/03/17 全球购物
.NET remoting的两种通道是什么
2016/05/31 面试题
趣味运动会活动方案
2014/02/12 职场文书
《问银河》教学反思
2014/02/19 职场文书
贺卡寄语大全
2014/04/11 职场文书
学生检讨书怎么写
2014/10/09 职场文书
经营目标责任书
2015/05/08 职场文书
导游经典开场白——导游词
2019/04/17 职场文书
python实现腾讯滑块验证码识别
2021/04/27 Python
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android