【问题标题】:PHP MySQL Cursors? or Query without fetchingPHP MySQL 游标?或查询而不获取
【发布时间】:2015-05-19 18:18:56
【问题描述】:

我正在运行一些查询,运行时间为 0,0053 秒,但获取大约需要 12 秒...这会导致 PHP 在获取大约 100,000 行时超时。

我想知道是否有一种方法可以使用游标或其他东西来加快获取速度,例如在 Python 中,您可以在不获取每一行的情况下通过循环...因为 PHP 中的超时会破坏一切

【问题讨论】:

  • 你能给我们看一些代码吗?
  • 当您已经知道您的超时设置将被违反时,如何提高超时?我的意思是超时是为了保护你,而不是为了惹恼你。
  • 真正的问题是你为什么需要获取那么多行?您可以在查询中使用 LIMIT 指令来仅选择特定范围的行。
  • 提高超时不是一个选项,因为如果我需要解析 300,000 行与我需要 100,000 行的时间不同。我需要这么多行,因为我正在向 RabbitMQ 发送消息,稍后将在 Python 或其他语言上处理这些消息。但是这个消息需要从 PHP 发送。

标签: php python mysql


【解决方案1】:

计划 A:SELECT COUNT(*)... 看看是 100K 还是 300K 或其他。将其代入经验公式(如$seconds = 10 + $count / 2000)并将其代入set_time_limit($seconds)。 (这假设您没有超时执行COUNT(*)!)

B 计划:将数据“分块”,这样您就不会尝试一次性获取所有数据。 (请记住,PHP 有一个默认的内存限制,您可能会威胁要超过这个限制。)分块不应使用OFFSETLIMIT,而是“记住它离开的地方”;否则它将变得越来越慢并最终超时。有关分块的更多详细信息,请参见 http://mysql.rjweb.org/doc.php/deletebig

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多