【问题标题】:PHP MySQL Stored Procedures still slow to output (almost crashes browser)PHP MySQL存储过程仍然输出缓慢(几乎崩溃浏览器)
【发布时间】: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:stackoverflow.com/questions/2454071/…

标签: php mysql stored-procedures


【解决方案1】:

使用 ob 一点都不好,谁说这误导了你......你应该做的不是你如何输出数据,而是查看你的 mysql 查询以及如何优化它尽可能使用关键列来查找您循环的任何内容,尽量限制行数,使用索引当您想要优化数据库脚本时,所有这些都非常重要

您可以使用 EXPLAIN 词来找出瓶颈可能在哪里,您可能需要在哪里建立索引等等

【讨论】:

  • 这是我上一个关于 Ob_start 的问题
  • 是的,我明白这一点,但是 ob 所做的是将打印的内容保存到内存中,这将造成一个糟糕的瓶颈,这将使其无法对更多访问者进行扩展,尝试删除 ob 并查看它需要多快那么,我很确定是否有问题是查询不好
  • 几乎一样。问题是我需要显示所有 5000 条记录,所以我真的想不出一种方法来限制或抵消结果。
  • 如果您可以获得打印的查询,请将其复制,然后如果您有权访问 phpmyadmin,请在您刚刚复制的查询之前使用 EXPLAIN 运行查询并在此处发布您获得的内容
  • 我运行这个:EXPLAIN list_products,它说 SP 不存在(!?)但我只是做了 SHOW PROCEDURE STATUS;它肯定出现了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 2012-06-14
相关资源
最近更新 更多