我在我的服务器中遇到了一个高负载,我检查了所有代码,所有这些都没问题,但我不确定它是(多列)代码。
我用这个
$getpics = mysql_query("select id,image_thumb from pics order by id desc limit 0,10");
while ($result = mysql_fetch_assoc($getpics)) {
$data1[] = $result;
}
$data1 = array_chunk($data1, 5);
echo '<table width="100%" border="0" cellpadding="5">';
foreach ($data1 as $row1) {
echo '<tr>';
foreach ($row1 as $column1) {
echo '
<td align="center">
<div class="imagepic">
'.$column1[image_thumb].'
</div>
</td>
';
}
echo '</tr>';
}
echo '</table>';
mysql_free_result($getpics);
所以现在让我感到困惑的是代码在我的网站上加载。
问候
答案 0 :(得分:1)
您可以缓冲输出,而不是写出每一行。
$buf = "<table width="100%" border="0" cellpadding="5">";
foreach ($data1 as $row1) {
$buf .= "<tr>";
foreach ($row1 as $column1) {
$buf .= "<td align='center'>";
$buf .= "<div class='imagepic'>";
$buf .= $column1[image_thumb];
$buf .= "</div></td>";
}
$buf .= "</tr>";
}
$buf .= "</table>";
echo $buf;
嵌套for循环可能也无济于事。按名称或索引直接访问列可能会更快。
答案 1 :(得分:1)
我冒昧地做了一些修改。我删除了一个循环,摆脱了array_chunk和其他一些循环。我真的没有看到太多错误,所以问题很可能出现在其他问题上,但请告诉我。
$getpics = mysql_query("select id,image_thumb from pics order by id desc limit 0,10");
$out = '<table width="100%" border="0" cellpadding="5">'; // Use a string and concat
$i = 0;
while ($row = mysql_fetch_assoc($getpics)) { // No need to loop twice. Once is fine,
if(!($i%5))$out .= '<tr>';
$out .= '<td align="center">
<div class="imagepic">
'.$row['id']. /*Do you REALLY want ID? That's what foreach will give you*/ '
</div>
</td>
<td align="center">
<div class="imagepic">
'.$row['image_thumb'].'
</div>
</td>';
$i++;
if(!($i%5))$out .= '</tr>'; // Inner loop removed. You're only selecting two columns!
}
if(($i%5))$out .= '</tr>'; // close the last row.
echo $out.'</table>';
mysql_free_result($getpics);
显然在使用之前检查错误。
答案 2 :(得分:0)
您可以缓冲输出,但PHP脚本不是此处的阻止程序。 MySQL可能也不应该,因为你有一个LIMIT设置。
您可以在该查询上运行DESCRIBE SELECT并报告加载时间吗?其他页面也在主机上加载不好吗?
答案 3 :(得分:0)
php本身不会导致任何负载问题,除非你在这里展示的代码之外发生了巨大的事情。
通常你的查询是瓶颈,尝试在你的查询上运行解释,例如。在phpmyadmin或mysql命令行等工具中EXPLAIN SELECT ...
,然后在此处发布输出。
你的查询非常简单,因为你在id(主键,我假设自动增量)上订购,问题不太可能是mysql索引。
如果查询导致问题,请检查索引(可以在id,image_thumb上创建索引),请参阅http://dev.mysql.com/doc/refman/5.5/en/multiple-column-indexes.html,或使用memcached作为结果集的临时缓存引擎。