목차
回复讨论(解决方案)
백엔드 개발 PHP 튜토리얼 一个PHP页面中有多条查询语句,导致页面打开速度特别慢,怎么办

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

Jun 23, 2016 pm 01:37 PM

下面的代码有点乱,我简单解释一下吧。首先从部门表中查询出部门记录,然后根据部门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)){
                
            ?>
                
                    
                        
                        
                    


回复讨论(解决方案)

都建了索引,结果一点作用都没有

如果??不需要???示,可以使用?存。

例如:
$data = getcache();  // ??存中?取
if($data==''){
   // ?取db?取??
  $data = '?取db?取';
  setcache($data); // ?入?存
}

echo $data;

看看用到索引没有,
在一个尽量减少不需要查询的内容,或者一次少查点

如果??不需要???示,可以使用?存。

例如:
$data = getcache();  // ??存中?取
if($data==''){
   // ?取db?取??
  $data = '?取db?取';
  setcache($data); // ?入?存
}

echo $data;



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

explain你的sql语句看看索引使用情况


如果??不需要???示,可以使用?存。

例如:
$data = getcache();  // ??存中?取
if($data==''){
   // ?取db?取??
  $data = '?取db?取';
  setcache($data); // ?入?存
}

echo $data;



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

是?在文件中的。

http://www.itstrike.cn/Question/PHP-technology-to-achieve-dynamic-cache-instance

楼主,可以把数据存到文件或者memcache当中去。


不过,你在循环中查询,这本身就不应该。你可以把两张表的数据一次全部查询完,再循环,或许比现在的速度要快些。

循环嵌套查询很可怕

个人愚见,你这嵌套循环查询效率很低,建议合并之

优化sql吧,尽量的一条sql能查出所有内容,然后下面循环展示就好了

关联:部门表关联用户表关联日志表关联审核表
排序:先按部门id排,再按用户id,再...(后面的关系没看透)
条件:就是你那些,整合一下
查询字段:只取用到的,比如部门id、部门名、用户id、用户名、...(没用到的字段坚决不取)
查询条数:这个你没有,建议写一个,大数据查询没有分页很可怕
这样只用一句语句就能得到数据了
然后就是遍历数据,由于排过序,所以不用怕会乱
第一个遍历部门,碰到部门id不同就另起一个table
每个部门再遍历用户,碰到用户不同就另起一个table
每个用户...

不知道下面这个SQL能不能让你的速度快些(不保证该SQL正确可行)

SELECT d.*,m.*,l.* FROM depart d 
left join members m on m.flag left 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_date WHERE d.gid>0 AND d.gid

写成一个语句了~

desc sql
关键字段创建索引

不知道下面这个SQL能不能让你的速度快些(不保证该SQL正确可行)

SELECT d.*,m.*,l.* FROM depart d 
left join members m on m.flag left 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_date WHERE d.gid>0 AND d.gid

我试了一下,查询效率是挺快的,不用等,但是在页面里该怎么调用?

我的需求是先显示部门,然后显示部门里的所有用户,以此类推。但是现在成了部门、用户和其他的都一起显示出来了。

关联:部门表关联用户表关联日志表关联审核表
排序:先按部门id排,再按用户id,再...(后面的关系没看透)
条件:就是你那些,整合一下
查询字段:只取用到的,比如部门id、部门名、用户id、用户名、...(没用到的字段坚决不取)
查询条数:这个你没有,建议写一个,大数据查询没有分页很可怕
这样只用一句语句就能得到数据了
然后就是遍历数据,由于排过序,所以不用怕会乱
第一个遍历部门,碰到部门id不同就另起一个table
每个部门再遍历用户,碰到用户不同就另起一个table
每个用户...



第一个遍历部门,碰到部门id不同就另起一个table
每个部门再遍历用户,碰到用户不同就另起一个table

id不同就另起一个table是什么意思?

                            
                        
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Ouyi 지갑 니모닉 문구를 잊어버린 경우 어떻게 해야 하나요? 아직도 찾을 수 있나요? Ouyi 지갑 니모닉 문구를 잊어버린 경우 어떻게 해야 하나요? 아직도 찾을 수 있나요? Jul 19, 2024 pm 12:13 PM

Web3 세계에서는 무료이지만 위험이 가득합니다. 따라서 Ouyi 지갑의 보안을 위한 첫 번째 단계는 개인 키와 니모닉 문구를 보호하는 것입니다. 개인 키의 중요성은 모두가 알고 있으며 오늘날 니모닉에 중점을 두고 있습니다. 니모닉 문구는 개인 키를 표현하는 또 다른 형태로 이해될 수 있습니다. 니모닉 문구를 갖는 것은 개인 키를 소유하고 지갑 자산을 제어하는 ​​것과 같습니다. 또한 개인키에 비해 존재감이 낮아 사용자들이 Ouyi Wallet의 니모닉 문구를 잊어버릴 수도 있다고 생각됩니다. 그럼 Ouyi Wallet의 니모닉 문구를 잊어버린 경우 어떻게 해야 하나요? Ouyi 지갑 니모닉을 잊어버린 경우에도 검색할 수 있나요? 사용자가 주의해야 할 문제. 일반적으로 니모닉 문구를 잊어버리면 검색할 수 없으므로 관련 고객 서비스 담당자에게 도움을 요청하세요. 아래 에디터가 자세히 알려드리겠습니다. Ouyi 지갑 니모닉 문구를 잊어버린 경우 어떻게 해야 하나요? Ouyi Wallet의 니모닉 문구를 잊어버린 경우, 기억해내시거나 당사에 문의해 주시기 바랍니다.

TV에 눈송이가 나타날 경우 대처 방법(TV에 눈송이가 나타나는 문제를 해결하는 실용적인 방법) TV에 눈송이가 나타날 경우 대처 방법(TV에 눈송이가 나타나는 문제를 해결하는 실용적인 방법) Jun 01, 2024 pm 09:44 PM

일상 생활에서 중요한 엔터테인먼트 장치인 TV는 종종 눈보라로 인해 어려움을 겪으며 이는 시청 경험에 영향을 미칩니다. 이 기사에서는 TV 눈 문제를 해결하고 TV 프로그램을 더 잘 즐길 수 있는 실용적인 방법을 소개합니다. 1. 눈송이 문제의 원인 분석 TV에 나타나는 눈송이는 일반적으로 신호 간섭, 안테나 문제 또는 TV 신호 소스로 인해 발생합니다. 2. 안테나 연결이 느슨하지 않은지 확인하세요. 먼저 TV와 안테나의 연결이 느슨해졌는지 확인하세요. 3. 안테나의 위치와 방향이 올바른지 확인하기 위해 적합한 안테나를 선택하십시오. 성능이 좋은 안테나를 선택하면 신호 수신 품질이 향상될 수 있습니다. 4. 안테나 방향을 조정하세요. 안테나를 회전시키거나 각도를 조정하여 최적의 신호 수신 방향을 찾으세요. 5. 실내 안테나 신호를 사용하세요

광대역이 연결되어 있는데 인터넷에 접속할 수 없는 문제 해결(문제 해결) 광대역이 연결되어 있는데 인터넷에 접속할 수 없는 문제 해결(문제 해결) May 05, 2024 pm 06:01 PM

오늘날의 정보화 시대에 인터넷은 사람들의 삶에 없어서는 안 될 부분이 되었습니다. 하지만 온라인에 접속할 수 없고 때로는 몇 가지 문제가 발생합니다. 그러나 예를 들어 광대역은 이미 연결되어 있습니다. 그리고 해당 해결 조치를 취하십시오. 이 경우 네트워크 연결을 복원하려면 문제를 단계별로 해결해야 합니다. 장치 연결 상태 확인: 휴대폰 및 기타 장치가 광대역 네트워크에 올바르게 연결되었는지 여부를 컴퓨터에서 확인하여 무선 네트워크 또는 유선 네트워크 연결이 정상적인지 확인하십시오. 2. 광대역 장치를 다시 시작합니다. 장치를 재설정하고 연결을 다시 설정한 후 몇 분 정도 기다렸다가 다시 켜십시오. 광대역 라우터나 모뎀을 꺼보세요. 3. 광대역 계정번호 및 비밀번호 확인: 잘못된 계정 또는 비밀번호로 인해 인터넷에 접속할 수 없는 상황을 방지하려면 광대역 계정번호와 비밀번호가 올바른지 확인하세요. 4. D를 확인하세요

pagefile.sys가 너무 많은 공간을 차지하는 경우 수행할 작업 pagefile.sys가 너무 많은 공간을 차지하는 경우 수행할 작업 Feb 20, 2024 am 09:01 AM

pagefile.sys가 너무 많은 공간을 차지하면 어떻게 해야 합니까? 컴퓨터를 사용하는 과정에서 메모리가 부족한 경우가 종종 있습니다. 이 문제를 해결하기 위해 운영 체제는 메모리에 있는 데이터의 일부를 디스크의 특수 파일인 pagefile.sys로 전송합니다. 그러나 때로는 pagefile.sys 파일이 매우 크고 디스크 공간을 너무 많이 차지하는 경우가 있습니다. 그렇다면 이 문제를 어떻게 해결합니까? 먼저, pagefile.sys 파일을 명확히 해야 합니다.

내 win7 컴퓨터에서 실행 중인 소프트웨어가 호환되지 않으면 어떻게 해야 합니까? 내 win7 컴퓨터에서 실행 중인 소프트웨어가 호환되지 않으면 어떻게 해야 합니까? Jul 13, 2023 pm 06:49 PM

win7 운영 소프트웨어가 호환되지 않으면 어떻게 해야 합니까? 설치를 위해 이전 시스템에서 win7로 프로그램을 복사하면 설치에 실패합니다. 이는 win7 운영 소프트웨어와의 비호환 문제입니다. 그렇다면 win7 운영 소프트웨어가 호환되지 않으면 어떻게 해야 합니까? 여기에서는 win7 운영 소프트웨어의 비호환성에 대한 솔루션을 여러분과 공유하겠습니다. win7 컴퓨터에서 실행 중인 소프트웨어가 호환되지 않는 경우 수행할 작업: 1. 호환되지 않는 소프트웨어 또는 프로그램을 마우스 오른쪽 버튼으로 클릭합니다. 2. 팝업 메뉴 목록에서 속성 옵션을 클릭합니다. 3. 팝업 속성 창에서 호환성 탭을 클릭하세요. 4. 호환성 탭에서 호환 모드에서 이 프로그램 실행 옵션을 찾으세요. 5. 표시된 대로 이 프로그램을 호환 모드에서 실행 옵션을 선택하세요! 6. 끝났습니다! 참고: 이 방법은 일부 소프트웨어에는 유효하지 않습니다.

win11 오른쪽 하단 아이콘을 클릭해도 반응이 없으면 어떻게 해야 하나요? win11 오른쪽 하단 아이콘을 클릭해도 반응이 없으면 어떻게 해야 하나요? Jun 29, 2023 pm 01:54 PM

win11 오른쪽 하단 아이콘을 클릭해도 반응이 없으면 어떻게 해야 하나요? 현재 실행 중인 작업에 대한 바로가기 아이콘이 컴퓨터 오른쪽 하단에 표시될 수 있어 아이콘을 클릭하기만 하면 작업을 계속 실행할 수 있어 매우 편리합니다. 그러나 많은 사용자들은 win11 시스템의 오른쪽 하단에 있는 작업 아이콘 바로 가기 키를 클릭한 후 응답하지 않는 것을 발견했습니다. 무슨 일입니까? 오늘은 편집자가 win11 오른쪽 하단에 있는 바로가기를 클릭하는 문제를 해결하는 방법에 대한 튜토리얼을 제공할 것입니다. 필요한 사용자는 빠르게 살펴봐야 합니다. win11 오른쪽 하단에 있는 아이콘이 응답하지 않으면 어떻게 해야 합니까? 1. 먼저 키보드의 "win" 버튼을 누른 다음 "설정"을 클릭합니다. 2. 그런 다음 시스템 설정에서 "정보"를 클릭하세요. 3. 그런 다음 장치 사양에서 파란색 글꼴로 표시된 "고급 시스템 설정"을 찾습니다.

HP 프린터로 복사하는 방법 HP 프린터로 복사하는 방법 Jan 06, 2024 am 08:44 AM

HP는 잘 알려진 프린터 브랜드로 각각 기능과 용도가 다른 다양한 스타일과 모델의 프린터를 출시했습니다. 그러나 가장 기본적인 기능은 문서 인쇄 및 복사입니다. 여기서는 HP 프린터 v50157037-1 모델을 예로 들어 복사 작업을 수행하는 방법을 소개합니다. 먼저, HP 프린터가 컴퓨터나 네트워크에 연결되어 있고 드라이버가 설치되어 있는지 확인하세요. 그런 다음 복사하려는 문서를 열고 프린터의 스캔 판에 놓습니다. 그런 다음 일반적으로 프린터 제어판이나 컴퓨터의 프린터 설정을 통해 찾을 수 있는 HP 프린터 제어판을 엽니다. 제어판에는 다음과 같은 몇 가지 버튼이나 메뉴 옵션이 표시됩니다.

Windows 7 네트워크 아이콘이 사라지는 문제를 해결하는 방법 Windows 7 네트워크 아이콘이 사라지는 문제를 해결하는 방법 Dec 31, 2023 pm 08:11 PM

많은 친구들이 win7에서 네트워크 아이콘이 없으면 어떻게 해야 하는지 묻고 있습니다. 오늘 편집자는 win7 컴퓨터에서 네트워크 아이콘이 누락되는 문제에 대한 해결책을 알려드릴 것입니다. Windows 7에서 누락된 네트워크 아이콘에 대한 해결 방법: 1. 바탕 화면 작업 표시줄 오른쪽에 있는 네트워크 연결 아이콘을 마우스 오른쪽 버튼으로 클릭하고 "네트워크 및 공유 센터 열기"를 선택합니다. 2. 입력 후 왼쪽의 "어댑터 설정 변경"을 선택하여 "무선 네트워크 연결"이 있는지 확인하세요. 아이콘에 빨간색 십자가가 있으면 무선 네트워크 연결 아이콘을 더블클릭하여 무선 네트워크 카드를 유지하세요. 노트북 스위치를 켠 다음 네트워크 연결 아이콘이 나타나야 합니다. 3. 위의 방법으로 문제가 해결되지 않으면 "win" + "R"을 길게 눌러 실행 명령 상자를 불러옵니다. 4. 입력창에서 '

See all articles