时间:2021-05-26
如下所示:
//计时开始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...$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输出毫秒级的时间。为获取更为精准的毫秒级时间戳可以使用下面的代码:
<?phpfunction getMillisecond() {list($t1, $t2) = explode(' ', microtime());return (float)sprintf('%.0f',(floatval($t1)+floatval($t2))*1000);}echo getMillisecond();运行结果:1.46647658229E+12
以上这篇PHP获取MySQL执行sql语句的查询时间方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
我们知道分析MySQL语句查询性能的方法除了使用EXPLAIN输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称
查询到效率低的SQL语句后,可以通过EXPLAIN或者DESC命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接
1慢查询定义指mysql记录所有执行超过long_query_time参数设定的时间阈值的SQL语句。慢查询日志就是记录这些sql的日志。2开启慢查询日志找到m
MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP)。这条命令的输出结果能够让我们了解MySQL优化器是如何执行SQL语句的。这条命令并没有提供
本文讲解了在MySql中查询当前正在运行的SQL语句的方法,具体是通过statusming令,查看Slowqueries这一项,如果值长时间>0,说明有查询执行