首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP查询加载太慢。如何提高速度?

PHP查询加载太慢。如何提高速度?
EN

Stack Overflow用户
提问于 2012-12-18 00:32:13
回答 4查看 1K关注 0票数 0

有没有人知道更有效的方法来写下面的代码。我现在的加载时间超过了一分钟。这是我在一个更长的代码集之后想出来的。

代码语言:javascript
复制
$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++;
  }

请让我知道如果这个代码是不言自明的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-18 00:37:37

代码语言:javascript
复制
$sql_statementj = "Select * from vinyl_figures WHERE ImageID = '$title'";
$sql_statementj = "Select Series from vinyl_figures WHERE ImageID = '$title'";

在这两条语句中,如果我的代码正确的话,您似乎对同一文件发出了一个mysql请求。在循环之外发出这些请求,这应该会做一些工作。

票数 2
EN

Stack Overflow用户

发布于 2012-12-18 00:36:50

编写一个存储过程(也许一个简单的查询/视图就足够了)来完成所有这些查询工作,并监视数据库索引。

票数 0
EN

Stack Overflow用户

发布于 2012-12-18 00:38:17

WHERE EXISTS子句几乎可以肯定是罪魁祸首,应该对其进行重构。慢速查询的一般指南...

  1. 使用EXPLAIN SELECT查看查询的实际操作
  2. 在WHERE、JOIN、ORDER、GROUP
  3. Avoid *中使用的所有列上添加索引,而只选择您需要的列
  4. 将限制添加到不需要完整表扫描的所有查询中。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13918066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档