【问题标题】:PHP PDOStatement::fetchAll() slow request executionPHP PDOStatement::fetchAll() 请求执行缓慢
【发布时间】:2017-05-06 00:40:33
【问题描述】:

我有我正在开发的 PHP 应用程序,我需要使用 MSSQL Server 作为我的数据库源。作为应用程序的唯一开发人员,我可以根据公司的要求选择我想要的数据库服务器之外的技术。那么问题来了。

我在连接到 MSSQL SQL Server 2014 SP2 CU1(IT 控制资源)的 Zend Server 9.0 上运行 PHP 7.0.6。我遇到的问题是,当我对表 x 执行查询时,数据库调用在 3.62 毫秒内完成(根据 Zend Server)。但是,PDOStatement::fetchAll() 平均需要 15 秒才能返回 27k 结果。我尝试了各种连接方式来检索数据,但似乎没有任何效果。

有没有人遇到过这样的问题,如果有,他们的解决方案是什么。我正在使用这里的 MSSQL DB 驱动程序:https://www.microsoft.com/en-us/download/details.aspx?id=20098

我的 PDO 连接设置是这样的:

$this->pdo = new PDO("sqlsrv:Server=".$this->host.";ConnectionPooling=0;Database=".$this->table
                          , $this->user
                          , $this->password
                          , array(PDO::ATTR_PERSISTENT => true)
                    );

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • SQL Server 和代码之间的数据吞吐量是多少,每行的大小是多少?
  • 如果不涉及数据库调用,你还应该看看你的连接速度,这也会减慢进程。
  • 您是否尝试过同时检索所有 27k 行?我敢打赌,您要么在消耗网络连接,要么消耗内存,或两者

标签: php sql-server pdo


【解决方案1】:

可能是查询不需要太长时间,但 fetchAll 构建了一个包含 27k 结果的数组,需要一段时间来处理。 您需要为此找到另一种方法,您可以对查询进行分页并在每页显示一系列元素。 这是有关如何执行此操作的教程。 Pagination with PHP and PDO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 2013-01-07
    • 2014-09-27
    • 2013-09-22
    • 2018-02-10
    • 2018-07-30
    • 1970-01-01
    相关资源
    最近更新 更多