PHP获取MySQL执行sql语句的查询时间方法
发布:smiling 来源: PHP粉丝网 添加日期:2021-10-25 21:15:44 浏览: 评论:0
今天小编就为大家分享一篇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
Tags: PHP获取MySQL
相关文章
- ·php获取mysql字段名称和其它信息的例子(2014-09-10)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)