Maison >base de données >tutoriel mysql >PDO::fetchAll() vs PDO::fetch() dans une boucle : lequel est le plus efficace pour les grands ensembles de données ?
Pour les scénarios impliquant la récupération de grands ensembles de résultats, une question courante se pose : Quelle méthode s'avère la plus efficace : PDO::fetchAll() ou PDO::fetch() en boucle ?
Notre hypothèse initiale suggère que PDO::fetchAll() pourrait exceller en vitesse en raison de la capacité de PDO à exécuter plusieurs opérations de base de données simultanément, contrairement à mysql_query() de MySQL, qui gère une opération à la fois. Cependant, la documentation du PDO reste muette sur cet aspect, et les hypothèses sont insuffisantes.
Pour résoudre cette question, nous avons réalisé un benchmark en utilisant un ensemble de données de 200 000 enregistrements. Les résultats confirment que PDO::fetchAll() offre effectivement des performances plus rapides :
fetchAll : 0.35965991020203s, 100249408b fetch : 0.39197015762329s, 440b
Cependant, ce gain de performances a un prix. PDO::fetchAll() nécessite beaucoup plus de mémoire que PDO::fetch() dans une boucle.
Pour répliquer le benchmark, vous pouvez utiliser le code suivant :
$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);
En conclusion, lorsque vous travaillez avec de grands ensembles de résultats, PDO::fetchAll() offre un avantage en termes de performances par rapport à PDO::fetch() dans une boucle. Cependant, cette amélioration est compensée par la consommation accrue de mémoire de PDO::fetchAll(). Par conséquent, le choix idéal dépend des exigences spécifiques de votre application, de l'équilibre entre la vitesse et l'utilisation de la mémoire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!