gpt4 book ai didi

php - 使用 Zend Framework 2 加速 6,000 行查询

转载 作者:可可西里 更新时间:2023-11-01 08:44:50 30 4
gpt4 key购买 nike

我有一个返回大约 6,000 个结果的查询。尽管此查询在 MySQL 中执行时间不到一秒,但一旦通过 Zend Framework 2 运行,速度就会显着下降。

出于这个原因,我尝试使用 PDO 以更“原始”的方式进行操作:

class ThingTable implements ServiceLocatorAwareInterface
{
// ...

public function goFast()
{


$db_config = $this->getServiceLocator()->get('Config')['db'];
$pdo = new PDO($db_config['dsn'], $db_config['username'], $db_config['password']);

$statement = $pdo->prepare('SELECT objectNumber, thingID, thingmaker, hidden, title FROM Things ', array(PDO::MYSQL_ATTR_COMPRESS, PDO::CURSOR_FWDONLY));
$statement->execute();

return $statement->fetchAll(PDO::FETCH_ASSOC);


}
}

不过,这似乎没有太大的加速。

我认为问题可能在于 Zend 仍在尝试为每条记录创建一个新的 Thing 对象,即使它只是部分列列表。我真的可以不填充任何对象。我真的只需要一些具有这些属性的列来迭代。

根据用户建议MonkeyZeus ,以下用于基准测试:

$start = microtime(true);
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
echo (microtime(true) - $start).' seconds';

作为回应:

In a VM, that returns 0.0050520896911621. This is in line with what it is when I just run the command straight in MySQL. I believe the overhead is in Zend, but not sure how to quite go about that. Again if I had to guess, I'd say it is because Zend is adding overhead while trying to be nice with the results, but I'm not quite sure how to proceed after that.

[I'm] not so worried about the query. It is a single select statement. goFast() gets called by the Zend indexAction() --similar to other actions used across the project--this one is just way slower at returning the page. One problem I found was that Zend's $this->url() was slowing things down a bit. So I removed those, but the performance still isn't great.

我怎样才能加快速度?

最佳答案

当您说在 MySQL 中该查询运行不到一秒时,您是什么意思?您是否尝试运行此查询并打印所有 6000 行?或者您只是查询了这个并打印了第一个/最后几个命令行?

问题可能是,您正在获取所有数据,通过游标,您正在将所有数据(6000 行)从 MySQL 复制到 PHP,然后返回它,您确定要这样做吗?

也许您可以向查询返回一个语句/游标,然后在您真正需要它时遍历行?

您的问题不在于 SQL 本身,而是一次将它们全部提取到 PHP 数组中。

您可以通过记录实际执行 SQL 并将其提取到 PHP 数组中所需的时间来测试它。

不要使用 fetchall,返回语句本身,在必须运行“foreach”这个数组的函数/代码中,使用语句逐行获取每一行。

关于php - 使用 Zend Framework 2 加速 6,000 行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31614787/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com