Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP+MySQL使用while循环会导致缓慢的结果_Php_Mysql - Fatal编程技术网

PHP+MySQL使用while循环会导致缓慢的结果

PHP+MySQL使用while循环会导致缓慢的结果,php,mysql,Php,Mysql,我制作了一个基于MYSQL的快速新闻提要到我的网站,在那里我用while函数+fetch_arry从数据库中写出最后四条新闻。。我记得,当我使用这样的脚本时,它工作得很好,但在这个脚本中,我从代码中得到的结果非常慢,高达18-20秒,这对我的追随者来说不是最好的。。问题的原因是什么?如何加快提取速度 $e = mysql_query('SELECT * FROM hirek ORDER BY date DESC LIMIT 4'); if (!$e) { die(mysql_error(

我制作了一个基于MYSQL的快速新闻提要到我的网站,在那里我用while函数+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函数。

为要在一次查询中排序的字段创建索引

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>';
      }
}
这是许多不需要两次执行查询的方法之一。
也考虑到MyQuLI/PDO切换为MySqL**。

谢谢,现在有点快了,但是它仍然需要7-8秒来加载。但无论如何,这总比20秒好,所以。。谢谢^^还有什么想法吗?我已经编辑了答案-现在试试。当然,马克·巴克的想法也很好。你为什么要两次执行“从hirek订单中选择*日期描述限制4”?更改$get\u hir=mysql\u num\u rowsmysql\u querySELECT*FROM hirek ORDER BY date DESC LIMIT 4;$get\u hir=mysql\u num\u rows$e;