Heim > Backend-Entwicklung > PHP-Tutorial > 一个PHP页面中有多条查询语句,导致页面打开速度特别慢,怎么处理

一个PHP页面中有多条查询语句,导致页面打开速度特别慢,怎么处理

WBOY
Freigeben: 2016-06-13 12:16:49
Original
1005 Leute haben es durchsucht

一个PHP页面中有多条查询语句,导致页面打开速度特别慢,怎么办
下面的代码有点乱,我简单解释一下吧。首先从部门表中查询出部门记录,然后根据部门ID查询出用户表中部门对应的用户,然后根据用户ID查询出日志表中用户对应的日志,然后再根据日志ID查询出审核表中领导的审核记录……,大概就是这样一层调用一层,导致打开页面需要1分钟左右。

我估计是扫描数据表的次数过多造成的,但是不知道该怎么解决?

    //查询部门
    $sql_depart="SELECT * FROM depart WHERE gid>0 AND gid    $query_depart=$db->query($sql_depart);
    while($d=$db->fetch_array($query_depart)){
?>
    


    
    
    

                 //查询人员
           
            $sql_user="SELECT * FROM members WHERE flag            $query_user=$db->query($sql_user);
            while($u=$db->fetch_array($query_user)){
        ?>        
    
       
        
            
        
        
一个PHP页面中有多条查询语句,导致页面打开速度特别慢,怎么处理  

                        //查询所有日志
            $sql="SELECT c1.*,c2.* FROM log c1 LEFT JOIN log_time c2 ON (c1.time_id=c2.tid) WHERE c2.year='".$year."' AND c1.userid='".$u['uid']."' AND c2.end_date            $query=$db->query($sql);
            while($row=$db->fetch_array($query)){
                
            ?>
                
                    
                        
                        
                    

------解决思路----------------------
引用:
Quote: 引用:

如果數據不需要實時顯示,可以使用緩存。

例如:
$data = getcache();  // 從緩存中讀取
if($data==''){
   // 讀取db獲取數據
  $data = '讀取db獲取';
  setcache($data); // 寫入緩存
}

echo $data;


这是写入到文件中吗?
有没有完整的实例供参考一下?


是寫在文件中的。

http://www.itstrike.cn/Question/PHP-technology-to-achieve-dynamic-cache-instance
------解决思路----------------------
顶楼上的..
不过可以理解
因为以前我也是这么干...
后面会玩多维数组后,一切都变的简单..

还有一种死办法,分N多页面来做,
好比,点击部门,进入用户页面,再依据用户页面
再点击用户进入用户操作记录页面...
------解决思路----------------------
关联:部门表关联用户表关联日志表关联审核表
排序:先按部门id排,再按用户id,再...(后面的关系没看透)
条件:就是你那些,整合一下
查询字段:只取用到的,比如部门id、部门名、用户id、用户名、...(没用到的字段坚决不取)
查询条数:这个你没有,建议写一个,大数据查询没有分页很可怕
这样只用一句语句就能得到数据了
然后就是遍历数据,由于排过序,所以不用怕会乱
第一个遍历部门,碰到部门id不同就另起一个table
每个部门再遍历用户,碰到用户不同就另起一个table
每个用户...
------解决思路----------------------
不知道下面这个SQL能不能让你的速度快些(不保证该SQL正确可行)

SELECT d.*,m.*,l.* FROM depart d 
left join members m on m.flagleft join (SELECT c1.*,c2.* FROM log c1 LEFT JOIN log_time c2 ON (c1.time_id=c2.tid) WHERE c2.year='".$year."'  AND c2.end_dateWHERE d.gid>0 AND d.gid

                            
                        
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage