대규모 결과 세트 검색과 관련된 시나리오의 경우 다음과 같은 일반적인 질문이 발생합니다. 루프에서 PDO::fetchAll() 또는 PDO::fetch() 중 어떤 방법이 더 효율적인가요?
우리의 초기 가정은 한 번에 하나의 작업을 처리하는 MySQL의 mysql_query()와 달리 여러 데이터베이스 작업을 동시에 실행할 수 있는 PDO의 기능으로 인해 PDO::fetchAll()이 속도 면에서 뛰어날 수 있음을 시사합니다. . 그러나 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!