PDO::fetchAll 与 PDO::fetch 在循环中获取大型结果集
在 PHP 的 PDO 扩展中,有两个主要的从数据库查询中获取数据的方法:PDO::fetchAll() 和 PDO::fetch()。在处理大型结果集时会出现一个常见的性能问题。在速度和效率方面使用一种方法相对于另一种方法有显着的优势吗?
PDO::fetchAll() 从查询结果中检索所有行作为行数组,而 PDO::fetch() 一次获取一行。主要区别在于 PDO::fetch() 在内部循环结果集并将每一行存储在数组中,而 PDO::fetchAll() 在一次操作中将所有行提取到内存中。
直观地说,一个可能会认为 PDO::fetchAll() 由于其一次性操作而更快,从而消除了对多个循环的需要。然而,这个假设在实践中不一定成立,它取决于几个因素:
性能比较:
使用具有 200,000 条随机记录的表进行基准测试表明: PDO::fetchAll() 在循环中比 PDO::fetch() 稍快:
内存使用:
但是,考虑内存影响很重要。 PDO::fetchAll() 将整个结果集存储在内存中,这对于大型数据库来说非常重要。在同一基准测试中,PDO::fetchAll() 消耗了大约 100 MB 内存,而 PDO::fetch() 仅消耗了 440 字节。
结论:
基于这些观察,对于大型结果集,在循环中选择 PDO::fetchAll() 和 PDO::fetch() 取决于应用程序的具体要求:
其他注意事项:
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3