首页 > 开发 > PHP > 正文

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

2024-05-04 22:42:19
字体:
来源:转载
供稿:网友

如下所示:

//计时开始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_sizeThe 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输出毫秒级的时间。为获取更为精准的毫秒级时间戳可以使用下面的代码:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表