CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  PHP

大家帮讨论一下,php写数据库的速度如何优化??运行中执行速度慢,请高手出来帮查原因

楼主yao_yao_(yaoyao)2006-02-09 17:11:54 在 Web 开发 / PHP 提问

小弟拿个实例来讲,也许清楚点!  
  两个页面:lineclear5.php         updateclear5.php  
  说明:当lineclear5.php页面提交时,传值到updateclear5.php,执行updateclear5.php页面中的相关数据库操作。  
  出现问题:测试用机测试时候并没有出现提交缓慢的问题,但在生产用机上提交时,大概要30秒才能提交成功,严重影响速度。  
  程序如下(摘录):  
  --------------lineclear5.php------------  
  document.form1.Submit.disabled=true;  
  document.form1.action="updateclear5.php?a=<?   echo   $a?>&type1=<?echo   $type?>&rrurkey1=<?echo   $rrurkey?>";  
  document.form1.submit();  
   
  --------------updateclear5.php----------------------  
  <?  
      session_start();  
      set_time_limit(300);  
      require   "getmax2.php";  
      //$max=getmax2("postdevice.rp_line","lineid")+1;  
      $hisid=getmax2("postdevice.rp_LineHistory","LineHisID")+1;//历史线索号  
      //include   "connect.php";  
      $conn=oracle_connect();  
   
   
      $query="select   linecount,leftlinecount,repairid,outlinecount   from   rp_report   where   rrid='".$a."'";  
      $stmt=ociparse($conn,$query);  
      $ok=ociexecute($stmt);  
      while(ocifetch($stmt))  
      {  
      $linecount=ociresult($stmt,1);//查出维修线索总数  
          $leftcount=ociresult($stmt,2);  
                        $repairid=ociresult($stmt,3);  
      $outcount=ociresult($stmt,4);     //还未销号的数  
      }  
  if($OPName1)                   //add   by   pj   on   2006-1-23   防止session超时处理  
  {  
   
      if($select==7)     //表示   已完成  
      {  
      if($linecount==0)  
      {  
      $lineno=1;       //维修单的序号而已(1、2、3......)  
      }  
      else  
      {  
      $lineno=$linecount+1;  
      }  
       
       
  $query="insert   into   postdevice.rp_line   values(seq_lineid.nextval,'".trim($a)."',sysdate,sysdate,sysdate,'',".$select.",'".$OPName1."','".trim($linetext3)."','".trim($sblx)."','".$sbbh."','".trim($sbmc)."','',".$BZFLAG1.",'$dmkey1','$REPAIRMAN_ID',".$lineno.",sysdate,'$rrurkey1','')";  
   
  $stmt=ociparse($conn,$query);//echo   $query;  
  @$ok1=ociexecute($stmt,ocidefault);  
   
  //$leftlinecount=$leftcount-1;   //完成则维修线索总数减1      
   
  $alllinecount=$linecount+1;  
  $outlinecount=$outcount+1;       //未销号  
  $query="update   rp_report   set   linecount=".$alllinecount.",outlinecount=".$outlinecount.",rrstatus='A'     where   rrid=".$a."";  
  $stmt=ociparse($conn,$query);//echo   $query;  
  @$ok2=ociexecute($stmt,ocidefault);  
   
  if($leftcount==0)//报障单的状态改为"已完成"  
          {  
  $query="update   rp_report   set   rrstatus='X',finishtime=sysdate   where   rrid=".$a."";  
  $stmt=ociparse($conn,$query);//echo   $query;  
  @$ok3=ociexecute($stmt,ocidefault);  
  }  
   
  if(!$ok1   ||   !$ok2)  
  {  
    //echo   "hahahahhaha";  
  ocirollback($conn);  
  return;  
  }  
  else  
  ocicommit($conn);  
      }  
   
   
      else   if($select==10||$select==11)//表示电话or远程  
      {  
      if($linecount==0)  
      {  
      $lineno=1;       //维修单的序号而已(1、2、3......)  
      }  
      else  
      {  
      $lineno=$linecount+1;  
      }  
           
      $query="insert   into   postdevice.rp_line   values(seq_lineid.nextval,'".trim($a)."',sysdate,sysdate,sysdate,sysdate,".$select.",'".$OPName1."','".trim($linetext3)."','".trim($sblx)."','".$sbbh."','".trim($sbmc)."','',".$BZFLAG1.",'$dmkey1','$REPAIRMAN_ID',".$lineno.",sysdate,'$rrurkey1','')";  
   
  $stmt=ociparse($conn,$query);echo   $query;  
  @$ok1=ociexecute($stmt,ocidefault);  
  if($ok1==1)  
  {  
        ocicommit($conn);  
  }  
  else  
  {  
        ocirollback($conn);  
        return;  
  }  
   
  $alllinecount=$linecount+1;  
  $query="update   rp_report   set   linecount=".$alllinecount.",rrstatus='A'     where   rrid=".$a."";  
  $stmt=ociparse($conn,$query);//echo   $query;  
  $ok=ociexecute($stmt);  
   
  if($leftcount==0)//报障单的状态改为"已完成"  
      {  
  $query="update   rp_report   set   rrstatus='X',finishtime=sysdate   where   rrid=".$a."";  
  $stmt=ociparse($conn,$query);//echo   $query;  
          $ok=ociexecute($stmt);  
      }  
  if($outcount==0)//未销号数为0,   置为   已销号  
      {  
  $query="update   rp_report   set   rrtimefinish=sysdate,rrstatus='f'   where   rrid=".$a."";  
  $stmt=ociparse($conn,$query);//echo   $query;  
          $ok=ociexecute($stmt);  
      }  
      }  
   
      else   if($select==4)     //表示直接送修硬件组  
      {  
      //$query="update   rp_line   set   content='".trim($content)."',dostatus=".$select.",   repairbz=14,repairxz=18,repairman=''   where   lineid=".$lineid."";  
      if($linecount==0)  
      {  
      $lineno=1;       //维修单的序号而已(1、2、3......)  
      }  
      else  
      {  
      $lineno=$linecount+1;  
      }  
    $query="insert   into   postdevice.rp_line   values(seq_lineid.nextval,'".trim($a)."',sysdate,sysdate,'','',".$select.",'".$OPName1."','".trim($linetext3)."','".trim($sblx)."','".$sbbh."','".trim($sbmc)."','','14','18','',".$lineno.",sysdate,'$rrurkey1','')";  
   
      $stmt=ociparse($conn,$query);//echo   $query;  
      $ok=ociexecute($stmt);  
   
  $alllinecount=$linecount+1;  
  $leftlinecount=$leftcount+1;  
  $outlinecount=$outcount+1;       //未销号  
   
  $query="update   rp_report   set   linecount=".$alllinecount.",leftlinecount=".$leftlinecount.",outlinecount=".$outlinecount.",rrtimereceive=sysdate,rrstatus='A',finishtime='',rrtimefinish=''   where   rrid=".$a."";  
  $stmt=ociparse($conn,$query);//echo   $query;  
  $ok=ociexecute($stmt);  
   
   
      }  
   
      if(!$ok)  
      {  
          echo   "提交不成功,请重新提交!";  
          return;  
      }  
      echo   "维修线索转交成功!<br>";  
  }           //194行  
   
      //插入维修线索历史表  
  $query="insert   into   rp_LineHistory   values(".$hisid.",seq_lineid.currval,'".$a."',sysdate,'$select','".$OPName1."','".trim($linetext4)."')";  
  $stmt=ociparse($conn,$query);//echo   $query;  
  ociexecute($stmt);  
   
      ocifreestatement($stmt);  
      ocilogoff($conn);  
  }  
  else  
  {  
  ocifreestatement($stmt);  
  echo   "超时,session丢失,请重新登陆!";  
          return;  
  }  
   
      echo   "<script>";  
      echo   "location='rocess1.php?URName=".$URName."&URKey1=".$URKey1."&SESSxhflag=".$SESSxhflag."&a=".$a."&OPName1=".$OPName1."'";  
      echo   "</script>";  
   
  ?>  
   
   
  这里$select是lineclear5.php   传过来的值,当提交时运行速度十分慢,页面提交差不多要30秒才能成功。不知道有何优化措施,请指教!!!! 问题点数:60、回复次数:10Top

1 楼gu1dai(异域苍穹.百年飞行)回复于 2006-02-09 17:20:26 得分 15

代码太多,你自己分析了。Top

2 楼gu1dai(异域苍穹.百年飞行)回复于 2006-02-09 17:21:03 得分 0

可能是数据量的问题。  
  建议用索引什么的优化下库再说。Top

3 楼yao_yao_(yaoyao)回复于 2006-02-09 17:37:44 得分 0

我已经对于用到的数据表建立了索引,但是感觉没有多大提高哟!Top

4 楼yao_yao_(yaoyao)回复于 2006-02-09 21:20:45 得分 0

有没有高手出来指点一下~~~!!!Top

5 楼ashchen(老陳)回复于 2006-02-10 08:30:32 得分 25

把mysql超过3秒的查询记录下来,my.cnf里有设置  
  然后分析慢的sql,否则光靠代码看不出所以然  
   
  欢迎来irc讨论  
  客户端下载  
  http://cosrc.com:8800/down/mirc.rarTop

6 楼yao_yao_(yaoyao)回复于 2006-02-10 08:56:09 得分 0

忘了说了,我用到的后台数据库为oracle816Top

7 楼syre(神仙)回复于 2006-02-10 11:10:53 得分 15

贴那么长的代码做什么  
  难道还要我们一点点看啊  
  把相关的抽出来就行了  
   
  如果是写入速度慢,考虑去掉不必要的索引Top

8 楼yh801216(艾奥利斯)回复于 2006-02-10 11:14:20 得分 5

呵呵,老大们都说了,hoho。  
   
  还是自己先确定下哪些语句的问题吧Top

9 楼yao_yao_(yaoyao)回复于 2006-02-10 14:31:09 得分 0

我在程序中加了调试代码如下:  
  <?    
   
  $time_start   =   getmicrotime();    
   
  function   getmicrotime()    
   
  {    
   
  list($usec,   $sec)   =   explode("   ",microtime());    
   
  return   ((float)$usec   +   (float)$sec);    
   
  }    
   
  ?>    
   
  然后到最后加入以下代码    
   
  <?    
   
  $time_end   =   getmicrotime();    
   
  printf   ("[页面执行时间:   %.2f毫秒]\n\n",($time_end   -   $time_start)*1000);    
   
  ?>    
   
  经过分段调试,终于找到原因了,原来是下面这句的问题  
  $hisid=getmax2("postdevice.rp_LineHistory","LineHisID")+1;//历史线索号  
  调用的函数执行时间达到了28秒,呵呵,终于找到了。修改后正常了,谢谢大家!!!  
  Top

10 楼yao_yao_(yaoyao)回复于 2006-02-10 14:38:29 得分 0

总结一下:原来定位错了。  
  总以为是分支处理的sql语句或数据库影响造成的。因此查了很久但是都没找到原因,唉!!真是郁闷了好久,看来程序调试很重要!Top

相关问题

  • 连接oracle数据库速度慢怎么优化
  • 求php备份优化mysql数据库
  • 更新数据库速度慢的问题!
  • 数据库统计速度慢,请教解决方法
  • 数据库统计速度慢,请教解决方法
  • 我的sybase 11.5数据库速度慢,请赐教(50分)
  • 关于数据库使用速度慢问题,请大家帮忙分析!
  • 同志大哥:如何解决数据库查询速度慢的问题?
  • 怎么优化数据库?
  • 优化mysql数据库?

关键词

  • 数据库
  • 优化
  • 代码
  • 页面
  • php
  • document
  • updateclear
  • lineclear
  • 提交
  • 速度

得分解答快速导航

  • 帖主:yao_yao_
  • gu1dai
  • ashchen
  • syre
  • yh801216

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo