PHP获取MySQL执行sql语句的查询时间方法

 更新时间:2018年08月21日 10:05:26   作者:Microtiger  
今天小编就为大家分享一篇PHP获取MySQL执行sql语句的查询时间方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

如下所示:

//计时开始
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语句的查询时间方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解析在zend Farmework下如何创立一个FORM表单

    解析在zend Farmework下如何创立一个FORM表单

    本篇文章是对在zend Farmework下如何创立一个FORM表单的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php实现仿写CodeIgniter的购物车类

    php实现仿写CodeIgniter的购物车类

    这篇文章主要介绍了php实现仿写CodeIgniter的购物车类,较为详细的分析了购物车的功能与具体实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • php静态编译swoole-cli并调用rust的动态链接库

    php静态编译swoole-cli并调用rust的动态链接库

    这篇文章主要为大家介绍了静态编译swoole-cli并调用rust的动态链接库实现步骤详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • PHP性能优化 产生高度优化代码

    PHP性能优化 产生高度优化代码

    PHP是一种在服务器端执行的脚本语言,它开发了世界上许多知名的网站,包括雅虎和Facebook等。下面介绍6条PHP代码、性能优化的技巧。
    2011-07-07
  • PHP实现通过URL提取根域名

    PHP实现通过URL提取根域名

    本文给大家分享的是个人在做项目的时候遇到的,需要通过php实现从URL中提取根域名的代码以及实现思路,有需要的小伙伴可以参考下
    2016-03-03
  • PHP更新购物车数量(表单部分/PHP处理部分)

    PHP更新购物车数量(表单部分/PHP处理部分)

    购物车的数量是根据用户的选择商品加入而不断增加的,下面是具体的实现代码(客服端部分/PHP服务器端处理),有类似需求的朋友可以参考下
    2013-05-05
  • linux下php上传文件注意事项

    linux下php上传文件注意事项

    这篇文章主要为大家详细介绍了linux下php上传文件注意事项,希望对大家安装php有所帮助,感兴趣的朋友可以参考一下
    2016-06-06
  • PHP 通过Socket收发十六进制数据的实现代码

    PHP 通过Socket收发十六进制数据的实现代码

    以下是对PHP中通过Socket收发十六进制数据的实现代码进行了分析介绍。需要的朋友可以过来参考下
    2013-08-08
  • PHP的cookie与session原理及用法详解

    PHP的cookie与session原理及用法详解

    这篇文章主要介绍了PHP的cookie与session原理及用法,结合实例形式详细分析了cookie与session的原理及php操作cookie与session的相关注意事项,需要的朋友可以参考下
    2019-09-09
  • PHP实现GIF图片验证码

    PHP实现GIF图片验证码

    这篇文章主要介绍了PHP如何生成GIF动态图片验证码,在注册界面时大家经常用到验证码,需要了解的朋友可以参考下
    2015-11-11

最新评论