在阅读了几篇关于 PHP 的 PDOfetchall()
函数的性能影响的文章后,我很好奇是否有另一种方法可以在不调用fetchall()
.
为了解释,大多数人同意这fetchall()
往往是资源密集型的。就我而言,我认为这不会是一个太大的问题。是的,我必须从我的数据库中提取整个表并将其显示给用户,但它最多只有 100 行;我不相信这将是一个问题。但是,假设我需要提取 100,000 行,那么什么是更优化的解决方案?
假设,如果您需要在单个响应中输出所有 100,000 行,您应该设置PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
为,执行查询,并使用fetchfalse
一次迭代一行结果集。详细地说,无论您是否调用 fetchAll() 如果设置为 true,php 都会缓冲整个结果集。PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
好处是您大大减少了脚本的最大内存消耗,并且您可以更快地开始流式输出,尽管完成的总时间可能会或可能不会花费更长的时间。
我忽略了在这种极端情况下你应该考虑的其他事情,比如输出缓冲等......
另一种方法是在循环中逐行获取,如下所示:
while( $row = $statement->fetch() ){
// so something with $row
}
显然,如果您需要所有行,例如用它们计算一些统计数据,那么上述方法不起作用。但是,在许多情况下,SQL 提供的解决方案允许您即时计算此类统计信息,并仅返回结果。