Untuk senario yang melibatkan pengambilan set hasil besar, soalan biasa timbul: kaedah manakah yang terbukti lebih cekap—PDO::fetchAll() atau PDO::fetch() dalam gelung?
Andaian awal kami mencadangkan bahawa PDO::fetchAll() mungkin cemerlang dalam kelajuan kerana keupayaan PDO untuk melaksanakan berbilang operasi pangkalan data secara serentak, tidak seperti mysql_query( MySQL) ), yang mengendalikan satu operasi pada satu masa. Walau bagaimanapun, dokumentasi PDO kekal senyap mengenai aspek ini dan andaian tidak mencukupi.
Untuk menyelesaikan soalan ini, kami menjalankan penanda aras menggunakan set data sebanyak 200,000 rekod. Keputusan mengesahkan bahawa PDO::fetchAll() sememangnya menawarkan prestasi yang lebih pantas:
fetchAll : 0.35965991020203s, 100249408b fetch : 0.39197015762329s, 440b
Walau bagaimanapun, kenaikan prestasi ini datang pada harga yang berpatutan. PDO::fetchAll() memerlukan lebih banyak memori daripada PDO::fetch() dalam satu gelung.
Untuk meniru penanda aras, anda boleh menggunakan kod berikut:
$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);
Kesimpulannya, apabila bekerja dengan set hasil yang besar, PDO::fetchAll() memberikan kelebihan prestasi berbanding PDO::fetch() dalam gelung. Walau bagaimanapun, peningkatan ini diimbangi oleh peningkatan penggunaan memori PDO::fetchAll(). Oleh itu, pilihan ideal bergantung pada keperluan khusus aplikasi anda, mengimbangi kelajuan dan penggunaan memori.
Atas ialah kandungan terperinci PDO::fetchAll() vs. PDO::fetch() dalam Gelung: Manakah Lebih Cekap untuk Set Data Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!