【问题标题】:PDO fetchAll takes a long timePDO fetchAll 需要很长时间
【发布时间】:2013-01-18 11:24:38
【问题描述】:

我正在使用 PDO 从我的 MySQL 数据库中获取结果。

如果我只执行执行语句,大约需要8 seconds。 (连续做同样的事情 350 次。)

当添加 fetchAll() 语句时,它会上升到 28 秒。这是正常行为吗?

我在 web 服务器和 db 服务器之间进行了网络测试速度,它在 87 Mbits/sec 附近,所以这不是问题。有什么想法吗?

【问题讨论】:

  • 我很好奇,它获取了多少行?
  • 难道你不能找到一种方法来逐个记录地处理结果集并省去在 PHP 中为整个事情分配内存的麻烦吗?
  • 同意@eggyal - fetchAll 非常低效;对于大多数用途来说,最好循环遍历数据集,一次获取一条记录。
  • 我原以为 execute 会更好地使用整体,因为它更高效且更安全(允许绑定参数,从而消除用户转义或引用参数的要求)。
  • 您是否在SELECT 语句中提供了LIMIT 子句?

标签: php mysql pdo


【解决方案1】:

8 秒的执行时间也长得离谱——这表明您没有正确索引表。因此,从表中获取数据需要很长时间。它也可能使用临时表。

确保您在“搜索”中使用了任何字段,或者在已编入索引的联接表中用作搜索键。正确的索引有点棘手 - 但要测试,在查询之前添加“EXPLAIN”并打印出结果 - 每个表都会有一行。如果您有任何“使用 WHERE”或“创建临时表”,那么您可能需要通过在这些表上添加索引来删除这些内容。

【讨论】:

    猜你喜欢
    • 2013-09-07
    • 2020-08-26
    • 2014-10-09
    • 2012-11-26
    • 2019-12-27
    • 2017-10-22
    • 2020-11-15
    • 2016-05-19
    • 2011-11-20
    相关资源
    最近更新 更多