Apabila bekerja dengan set hasil yang besar dalam pangkalan data PHP, pembangun mungkin menghadapi pilihan antara menggunakan PDO::fetchAll() dan PDO::fetch() dalam gelung. Keputusan ini terutamanya berkisar pada pertimbangan prestasi dan memori.
PDO::fetchAll()
PDO::fetch()
Perbandingan Prestasi
Tanda aras menunjukkan bahawa PDO ::fetchAll() adalah lebih pantas daripada PDO::fetch() dalam gelung, terutamanya untuk hasil yang besar set. Walau bagaimanapun, kelebihan prestasi ini datang dengan kos memakan lebih banyak memori.
Pertimbangan Memori
Keperluan memori PDO::fetchAll() adalah berkadar dengan saiz daripada set keputusan. Untuk set data yang besar, ini boleh membawa kepada masalah keletihan memori atau prestasi. PDO::fetch(), sebaliknya, tidak memerlukan ingatan yang ketara, kerana ia memproses baris secara berurutan.
Faktor-Faktor Yang Mempengaruhi Pilihan
Pilihan yang sesuai antara PDO::fetchAll() dan PDO::fetch() bergantung pada:
Contoh:
Untuk menggambarkan pertukaran, pertimbangkan penanda aras berikut kod:
$dbh = new PDO(...); $sql = 'SELECT * FROM test_table'; $stmt = $dbh->query($sql); $start_all = microtime(true); $data = $stmt->fetchAll(); $end_all = microtime(true); $start_one = microtime(true); while($data = $stmt->fetch()) {} $end_one = microtime(true); echo 'Result : ' . PHP_EOL; echo 'fetchAll : ' . ($end_all - $start_all) . 's, ' . memory_get_usage() . 'b' . PHP_EOL; echo 'fetch : ' . ($end_one - $start_one) . 's, ' . memory_get_usage() . 'b' . PHP_EOL;
Kaedah fetchAll mengambil masa 0.35 saat dan memerlukan 100MB memori, manakala gelung pengambilan mengambil masa 0.39 saat dan menggunakan hanya 440 bait memori.
Atas ialah kandungan terperinci Apabila bekerja dengan set hasil yang besar dalam PHP: Sekiranya saya menggunakan PDO::fetchAll atau PDO::fetch?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!