对于涉及大型结果集检索的场景,会出现一个常见问题:哪种方法更有效——循环中的 PDO::fetchAll() 或 PDO::fetch()?
我们最初的假设表明,PDO::fetchAll() 可能在速度方面表现出色,因为 PDO 能够同时执行多个数据库操作,这与 MySQL 的 mysql_query() 不同,后者一次处理一个操作。然而,PDO 文档在这方面仍然保持沉默,假设也不充分。
为了解决这个问题,我们使用 200,000 条记录的数据集进行了基准测试。结果证实 PDO::fetchAll() 确实提供了更快的性能:
fetchAll : 0.35965991020203s, 100249408b fetch : 0.39197015762329s, 440b
但是,这种性能提升是有代价的。 PDO::fetchAll() 在循环中比 PDO::fetch() 需要更多的内存。
要复制基准,您可以使用以下代码:
$dbh = new PDO('mysql:dbname=testage;dbhost=localhost', 'root', ''); $sql = 'SELECT * FROM test_table WHERE 1'; $stmt = $dbh->query($sql); // FetchAll benchmark $start_all = microtime(true); $data = $stmt->fetchAll(); $end_all = microtime(true); // Fetch loop benchmark $data = array(); $start_one = microtime(true); while($data = $stmt->fetch()){} $end_one = microtime(true);
总之,在处理大型结果集时,PDO::fetchAll() 提供了性能优于循环中的 PDO::fetch()。然而,这种改进被 PDO::fetchAll() 增加的内存消耗所抵消。因此,理想的选择取决于您的应用程序的具体要求,平衡速度和内存使用。
以上是循环中的 PDO::fetchAll() 与 PDO::fetch():对于大型数据集,哪个更有效?的详细内容。更多信息请关注PHP中文网其他相关文章!