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 相关文章推荐
攻克CakePHP系列二 表单数据显示
Oct 22 PHP
PHP中文分词的简单实现代码分享
Jul 17 PHP
探讨php中防止SQL注入最好的方法是什么
Jun 10 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
Mar 05 PHP
php不使用copy()函数复制文件的方法
Mar 13 PHP
PHP中你应该知道的require()文件包含的正确用法
Jun 12 PHP
PHP 接入支付宝即时到账功能
Sep 18 PHP
实例讲解YII2中多表关联的使用方法
Jul 21 PHP
php实现微信公众号企业转账功能
Oct 01 PHP
PHP的mysqli_thread_id()函数讲解
Jan 24 PHP
PHP错误提示It is not safe to rely on the system……的解决方法
Mar 25 PHP
PHP使用DOM对XML解析处理操作示例
Jul 04 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 来访国内外IP判断代码并实现页面跳转
2009/12/18 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
php 如何设置一个严格控制过期时间的session
2017/05/05 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
asp.net HttpHandler实现图片防盗链
2009/11/09 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2011/06/27 Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
2011/08/09 Javascript
FireBug 调试JS入门教程 如何调试JS
2013/12/23 Javascript
js弹出确认是否删除对话框
2014/03/27 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
移动端H5开发 Turn.js实现很棒的翻书效果
2016/06/20 Javascript
jQuery上传多张图片带进度条样式(DEMO)
2017/03/02 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
vue 使用vue-i18n做全局中英文切换的方法
2018/10/29 Javascript
详解小程序rich-text对富文本支持方案
2018/11/28 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
python执行get提交的方法
2015/04/29 Python
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
对python sklearn one-hot编码详解
2018/07/10 Python
python如何读取bin文件并下发串口
2019/07/05 Python
我们为什么要减少Python中循环的使用
2019/07/10 Python
Python如何定义有默认参数的函数
2020/08/10 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
利用Python实现自动扫雷小脚本
2020/12/17 Python
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
.net软件工程师面试题
2015/03/31 面试题
你对IPv6了解程度
2016/02/09 面试题
市场营销个人求职信范文
2014/02/02 职场文书
小学生暑假感言
2014/02/06 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
先进个人评语大全
2015/01/04 职场文书
threejs太阳光与阴影效果实例代码
2022/04/05 Javascript