PHP + MySQL使用while循环缓慢结果

时间:2014-04-28 17:51:03

标签: php mysql

我在我的网站上创建了一个快速的基于MYSQL的新闻源,我用数字函数+ fetch_arry写出了数据库中的最后四条新闻。我记得当我使用这样的脚本时它运行正常,但是有了这个,我的代码达到了18-20秒的速度非常缓慢,这对我的粉丝来说不是最好的事情。是什么导致了这个问题,或者我怎样才能加快提升速度?

$e = mysql_query('SELECT * FROM hirek ORDER BY date DESC LIMIT 4');
if (!$e) {  
  die(mysql_error());  
  $count = 0; 
  }
$get_hir = mysql_num_rows(mysql_query("SELECT * FROM hirek ORDER BY date DESC LIMIT 4"));
if ($get_hir <= 0)
{
echo '<div class="lil-box lil-box-tl"><div><center><h4>Nincsennek hírek!</h4></center></div></div>';
} else {
while($row = mysql_fetch_array($e))  
{
echo '<div class="lil-box lil-box-tl">';
  echo '<h4>'.$row['cim'].'</h4>';
  if($row['kep'] == 0)
  {
  echo '<div class="icon"><img alt="" src="images/icon-info.png" width="24" /></div>';
  } else if($row['kep'] == 1) {
  echo '<div class="icon"><img alt="" src="images/icon-up.png" width="24" /></div>';
  } else if($row['kep'] == 2) {
  echo '<div class="icon"><img alt="" src="images/icon-euro.png" width="24" /></div>';
  }
  echo tores($row['post'],65);
  echo '</div>';

}
}

('tores'是一个strlen函数。)

1 个答案:

答案 0 :(得分:0)

为您要排序的字段创建索引(一次查询)

ALTER TABLE `hirek`
ADD INDEX `date` (`date`);

这应该使您的查询在索引上工作,因此速度更快。

还要将您的代码重写为:

$e = mysql_query('SELECT * FROM hirek ORDER BY date DESC LIMIT 4');
if (!$e) {  
 die(mysql_error());  
 $count = 0; 
}
$rows = array();
while($row = mysql_fetch_array($e))  $rows[] = $row;

if (count($rows) == 0) {
echo '<div class="lil-box lil-box-tl"><div><center><h4>Nincsennek hírek!</h4></center></div></div>';
} else {
    foreach ($rows as $row)
    {
        echo '<div class="lil-box lil-box-tl">';
        echo '<h4>'.$row['cim'].'</h4>';
        if($row['kep'] == 0)
        {
            echo '<div class="icon"><img alt="" src="images/icon-info.png" width="24" /></div>';
        }
        else if($row['kep'] == 1) {
            echo '<div class="icon"><img alt="" src="images/icon-up.png" width="24" /></div>';
        } else if($row['kep'] == 2) {
            echo '<div class="icon"><img alt="" src="images/icon-euro.png" width="24" /></div>';
        }
        echo tores($row['post'],65);
        echo '</div>';
      }
}

这是在没有两次执行查询的情况下执行此操作的一种方法。 还可以考虑切换到mysqli / pdo,因为不推荐使用mysql_ *。