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 大数据量及海量数据处理算法总结
May 07 PHP
PHP针对JSON操作实例分析
Jan 12 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
May 12 PHP
刷新PHP缓冲区为你的站点加速
Oct 10 PHP
Joomla调用系统自带编辑器的实现方法
May 05 PHP
PHP实现判断数组是一维、二维或几维的方法
Feb 06 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
Jun 06 PHP
PHP 中魔术常量的实例详解
Oct 26 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
Oct 15 PHP
PHP levenshtein()函数用法讲解
Mar 08 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
Oct 11 PHP
PHP dirname功能及原理实例解析
Oct 28 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 header功能的使用
2013/10/28 PHP
将二维数组转为一维数组的2种方法
2014/05/26 PHP
PHP中怎样防止SQL注入分析
2014/10/23 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
css transform 3D幻灯片特效实现步骤解读
2013/03/27 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
JS 实现可停顿的垂直滚动实例代码
2016/11/23 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
2018/01/21 Javascript
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
2018/08/09 jQuery
vue.js2.0 实现better-scroll的滚动效果实例详解
2018/08/13 Javascript
react项目实践之webpack-dev-serve
2018/09/14 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
解决python打不开文件(文件不存在)的问题
2019/02/18 Python
python抓取需要扫微信登陆页面
2019/04/29 Python
Pytorch之卷积层的使用详解
2019/12/31 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
django中嵌套的try-except实例
2020/05/21 Python
python新手学习可变和不可变对象
2020/06/11 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
护理学毕业生自荐信
2013/10/02 职场文书
建筑施工安全责任书
2014/07/24 职场文书
董事长岗位职责
2015/02/13 职场文书
后勤工作个人总结
2015/02/28 职场文书
2015年感恩节活动总结
2015/03/24 职场文书
七一慰问简报
2015/07/20 职场文书
学雷锋活动简报
2015/07/20 职场文书
考教师资格证不要错过的4个最佳时机
2019/07/17 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python
Java中的随机数Random
2022/03/17 Java/Android