PHP MySQL存储过程仍然输出缓慢(几乎崩溃浏览器)
Posted
技术标签:
【中文标题】PHP MySQL存储过程仍然输出缓慢(几乎崩溃浏览器)【英文标题】:PHP MySQL Stored Procedures still slow to output (almost crashes browser) 【发布时间】:2011-05-20 23:19:03 【问题描述】:您好,几周前我在这里问了一个问题,关于为我的大约 5000 条记录的数据库加速 mysql 输出。我使用建议来使用 ob_start() 和存储过程。但是它仍然几乎使浏览器崩溃并且输出记录非常慢,任何想法如何优化它:
ob_start();
$conn = new Mysqli("xxxxxxxxxx", "xxxxxxxxx", "xxxxxxxxx", "xxxxxxxxxx");
$result = $conn->query(sprintf("call list_products(%d)", 6000));
while($row = $result->fetch_assoc())
echo "<tr>";
echo "<td>" . $row['xxxxxxx'] . "</td>";
echo "<td>" . $row['xxxxx'] . "</td>";
echo "<td>" . $row['xxxxx'] . "</td>";
echo "<td>" . $row['xxxxxx'] . "</td>";
echo "<td>" . $row['xxxx'] . "</td>";
echo "<td>" . $row['xxx'] . "</td>";
echo "<td>" . $row['xx'] . "</td>";
echo "<td>" . $row['xxxx'] . "</td>";
echo "</tr>";
echo "</tbody>";
echo "</table>";
$result->close();
$conn->close();
ob_end_flush();
【问题讨论】:
你确定有多少延迟是由 MySQL 和 php 造成的吗?例如,如果您直接从 MySQL 控制台调用存储过程,它返回结果的速度有多快?你的存储过程是做什么的——你能提供代码吗? MySQL 和 PHP 是在同一台服务器上,还是在不同的服务器上? 您可能还想查看mysql_query_unbuffered - 但请务必仔细阅读文档,因为有一些警告。 同一台服务器,我正在使用 phpMyAdmin,说我没有使用正确的上下文很痛苦!? 我认为上下文问题是PHPMyAdmin某些版本中的一个错误。看看这篇文章的公认答案及其 cmets:***.com/questions/2454071/… 【参考方案1】:使用 ob 一点都不好,谁说这误导了你......你应该做的不是你如何输出数据,而是查看你的 mysql 查询以及如何优化它尽可能使用关键列来查找您循环的任何内容,尽量限制行数,使用索引当您想要优化数据库脚本时,所有这些都非常重要
您可以使用 EXPLAIN 词来找出瓶颈可能在哪里,您可能需要在哪里建立索引等等
【讨论】:
这是我上一个关于 Ob_start 的问题 是的,我明白这一点,但是 ob 所做的是将打印的内容保存到内存中,这将造成一个糟糕的瓶颈,这将使其无法对更多访问者进行扩展,尝试删除 ob 并查看它需要多快那么,我很确定是否有问题是查询不好 几乎一样。问题是我需要显示所有 5000 条记录,所以我真的想不出一种方法来限制或抵消结果。 如果您可以获得打印的查询,请将其复制,然后如果您有权访问 phpmyadmin,请在您刚刚复制的查询之前使用 EXPLAIN 运行查询并在此处发布您获得的内容 我运行这个:EXPLAIN list_products,它说 SP 不存在(!?)但我只是做了 SHOW PROCEDURE STATUS;它肯定出现了!以上是关于PHP MySQL存储过程仍然输出缓慢(几乎崩溃浏览器)的主要内容,如果未能解决你的问题,请参考以下文章