2012-12-17 4 views
0

누구든지 다음을 작성하는보다 효율적인 방법을 알고 있습니까? 내로드 시간이 1 분 넘게 걸렸습니다. 이것은 내가 더 긴 코드 세트를 생각해 냈다.PHP 쿼리가 너무 느리게로드됩니다. 속도를 높이는 방법?

$max = $i + 25; 
while ($i < $max) 
    { 
    $memberno = $memberid; 
    if($pulledid!=$memberid) 
     { 
     $pulledid = mysql_result($result99,$i,"id_member"); 
     $sql_statement = "Select vinyl_fortrade.ImageID,vinyl_fortrade.MemberID from vinyl_fortrade where exists (Select ImageID from vinyl_wanted WHERE MemberID = $memberno AND vinyl_wanted.ImageID = vinyl_fortrade.ImageID) AND vinyl_fortrade.MemberID=$pulledid"; 
     $result=mysql_query($sql_statement)or die(mysql_error());  
     $num=mysql_numrows($result); 
     if($num>0) 
      { 
      $sql_statement2 = "Select vinyl_wanted.ImageID, vinyl_wanted.MemberID from vinyl_wanted where exists (Select ImageID from vinyl_fortrade WHERE MemberID = $memberno AND vinyl_wanted.ImageID = vinyl_fortrade.ImageID) AND vinyl_wanted.MemberID=$pulledid"; 
      $result2=mysql_query($sql_statement2)or die(mysql_error());     
      $num2=mysql_numrows($result2); 
      $membername = mysql_result($result99,$i,"smf_members.member_name"); 
      $userid2 = mysql_result($result99,$i,"smf_members.id_member"); 
      if ($num2 > 0) 
       { 
       $lastlogged = mysql_result($result99,$i,"smf_members.last_login"); 
       echo '<td><a href="http://vinylmationconnection.com/forum/index.php?action=pm;sa=send; u='.$userid.'"style="color: #FFF">'.$membername.'</a><br>Last Logged In:<br>'; 
       echo date('Y-m-d', $lastlogged); 
       echo ':</td>'; 
       echo '<td>'; 
       $n = 0; 
       $m = 0; 
       while ($n < $num) 
        { 
        $title=mysql_result($result,$n,"vinyl_fortrade.ImageID"); 
        $sql_statementj = "Select * from vinyl_figures WHERE ImageID = '$title'"; 
        $resultj=mysql_query($sql_statementj)or die(mysql_error()); 
        $seriess=mysql_result($resultj,0,"vinyl_figures.Series"); 
        echo '<img src="http://vinylmationconnection.com/images/p'.$seriess.'/'.$title.'.jpg">'; 
        $n++; 
        if($n%4=="0") 
         echo "<br>"; 
        } 
       echo '</td><td>'; 
       while ($m < $num2) 
        { 
        $title=mysql_result($result2,$m,"vinyl_wanted.ImageID"); 
        $sql_statementj = "Select Series from vinyl_figures WHERE ImageID = '$title'"; 
        $resultj=mysql_query($sql_statementj)or die(mysql_error()); 
        $seriess=mysql_result($resultj,0,"vinyl_figures.Series"); 
        echo '<img src="http://vinylmationconnection.com/images/p'.$seriess.'/'.$title.'.jpg">'; 
        $m++; 
        if($m%4=="0") 
         echo "<br>"; 
        }        
       echo '</td> </tr>'; 
       } 
      } 
     } 
    $i++; 
    } 

그 코드가 자체 설명인지 여부를 알려주십시오.

+2

일반적으로 성능 문제를 해결하는 방법은 코드에서 프로파일 러를 실행하고 프로파일 러가 코드의 어느 부분이 너무 느린지를 알려주는 것입니다. –

+1

이 코드는 그다지 자명하지 못합니다 ... while while 루프는 main while 루프에서 제거하십시오. ** ONE **만의 질의에 가입하십시오. 그리고 메인 'while'루프가 'for'또는'foreach' 루프 내에서 실행되고 있다고 생각합니다 ... 예수, 이건 시간 소비가 아닌가요? 'while'루프의 쿼리는 ... 죄송합니다. ** ** 느리게 실행되어야합니다. – shadyyx

+0

@ moonwave99 : 포스터를 모욕하는 것은 전적으로 불필요합니다. "끔찍하다"고 말하는 것이 아니라 어떻게 개선 할 수 있는지 설명하십시오. 그렇게 할 수 없다면 아무 말도하지 마세요. –

답변

2
$sql_statementj = "Select * from vinyl_figures WHERE ImageID = '$title'"; 
$sql_statementj = "Select Series from vinyl_figures WHERE ImageID = '$title'"; 

이 두 문장에서 나는 당신의 코드가 맞다면 같은 파일에 대해 mysql 요청을하는 것처럼 보인다. 이러한 요청을 루프 밖에서 처리하려면 몇 가지 작업을 수행해야합니다.

+1

루프 내부의 쿼리는 거의 항상 나쁜 아이디어입니다. 적절한 이스케이프 처리가없는 쿼리는 항상 잘못된 생각입니다. – tadman

0

이러한 모든 쿼리 작업을 수행하고 데이터베이스 인덱싱을 감시하는 저장 프로 시저 (간단한 쿼리/뷰 일 수도 있음)를 작성하십시오.

0

WHERE EXISTS 절은 거의 확실하게 범인이며, 리팩터링되어야합니다. 느린 쿼리에 대한 일반 지침 ...

  1. 를 사용하여 쿼리 정말
  2. 이 가입 WHERE에 사용 된 모든 컬럼에 인덱스를 추가하고 상황을 확인하기 위해 SELECT EXPLAIN, ORDER, 그룹
  3. * SELECT 피하고 대신 필요한 열만 선택하십시오.
  4. 전체 테이블 스캔이 필요하지 않은 모든 쿼리에 LIMIT를 추가하십시오.
0

alredy가 언급 한 답변을 제외하면 브라우저에 보내기 전에 mod_deflate를 사용하여 페이지를 압축하면 효과가 있습니다. 당신이 로컬 환경에 있다면 또한 기계에 부하 때문에 실행 속도가 느려질 수 있습니다.

그리고 내가 생각하기에 쿼리에서 LIMIT $i, 25을 사용하면 처음부터 잃을 수 있다고 생각합니다. 동일한 효과가 있다고 생각합니다. 당신이 간단한 foreach를 사용하여 그것들을 모두 가져 오면 완료 될 때까지로드를 약간 증가시키는 단일 쿼리에서 가능한 많이 밀어 넣으라고 제안하지만로드 시간은 줄어 듭니다.

저는 100 % 전문가는 아니지만 도움을 요청하고 있습니다.

관련 문제