對於涉及大型結果集檢索的場景,會出現一個常見問題:哪種方法更有效-迴圈中的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中文網其他相關文章!