PHP+MySQL使用while循环会导致缓慢的结果
我制作了一个基于MYSQL的快速新闻提要到我的网站,在那里我用while函数+fetch_arry从数据库中写出最后四条新闻。。我记得,当我使用这样的脚本时,它工作得很好,但在这个脚本中,我从代码中得到的结果非常慢,高达18-20秒,这对我的追随者来说不是最好的。。问题的原因是什么?如何加快提取速度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(
$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;