fetch_all () 메소드는 결과 세트의 모든 데이터를 메모리로 한 번에 가져 와서 2 차원 배열을 반환합니다. 장점은 코드가 배열의 직접 조작에 간단하고 편리하다는 것입니다. 단점은 결과 세트가 매우 커지면 메모리 소비가 높아서 프로그램 응답이 느리게 또는 메모리 오버플로를 유발할 수 있다는 것입니다.
예를 들어:
<?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");
$result = $mysqli->query("SELECT * FROM large_table");
$data = $result->fetch_all(MYSQLI_ASSOC);
print_r($data);
?>
이 코드에서는 fetch_all () 이 marge_table 의 모든 데이터를 한 번에 $ 데이터 배열로 읽습니다.
데이터 볼륨이 작 으면 Fetch_all ()은 성능이 거의없고 매우 효율적입니다. 그러나 결과 세트가 수만, 수십만 행 이상에 도달하면 Fetch_all () 가 가져온 메모리 오버 헤드 및 처리 시간이 점차 나타납니다.
메모리 사용 서지 : 모든 데이터는 한 번에로드되며 메모리 사용량은 데이터 양에 비례합니다.
응답 시간 증가 : 일회성 데이터 읽기로 인해 CPU 및 메모리 압력 농도는 지연으로 이어질 수 있습니다.
서버 안정성의 영향 : 극단적 인 경우 메모리 오버플로 및 스크립트 타임 아웃이 발생할 수 있습니다.
PHP 버전 : 7.4
데이터베이스 : MySQL 8.0
테스트 데이터 볼륨 : 10,000, 100,000, 500,000 행
하드웨어 : 4 핵심 CPU, 8GB 메모리
<?php
$mysqli = new mysqli("gitbox.net", "user", "password", "test_db");
$start = microtime(true);
$result = $mysqli->query("SELECT * FROM big_table");
$data = $result->fetch_all(MYSQLI_ASSOC);
$end = microtime(true);
echo "Rows fetched: " . count($data) . "\n";
echo "Time taken: " . ($end - $start) . " seconds\n";
?>
데이터 볼륨 | 시간 (초) | 메모리 사용 (MB) | 주목 |
---|---|---|---|
10,000 | 0.15 | 30 | 좋은 성능 |
100,000 | 1.8 | 280 | 상당히 속도가 느려졌습니다 |
500,000 | 10.2 | 1400 | 높은 메모리 위험 |
테스트 결과에서 데이터의 양이 증가함에 따라 Fetch_all () 의 응답 시간 및 메모리 사용이 선형 적으로 증가하거나 더 높아 졌음을 알 수 있습니다. 500,000 조각의 데이터를 처리 할 때 서버는 큰 압력을 받고 있으며 지연의 위험이 있습니다.
한 번에 빅 데이터를 읽지 마십시오 <br> 대규모 데이터의 경우 배치 또는 프로세스 행을 행으로 읽는 것이 좋습니다. 예를 들어, fetch_assoc () 루프를 사용하여 하나씩 얻습니다.
<?php
$result = $mysqli->query("SELECT * FROM big_table");
while ($row = $result->fetch_assoc()) {
// 라인별로 처리
}
?>
Pagination Query <br>를 사용하십시오 단일 요청의 압력을 줄이기 위해 SQL 제한 을 통해 배치로 데이터를 쿼리합니다.
데이터 구조의 합리적인 설계 <br> 쓸모없는 필드를 줄이고 과도한 중복 데이터 전송을 피하십시오.
MySQL 캐시를 활성화하고 쿼리 문 <br>를 최적화하십시오 데이터베이스 수준에서 응답 효율을 향상시킵니다.
mysqli_result :: fetch_all은 중소형 데이터 시나리오에서 훌륭하게 수행되며 개발하기 쉽고 효율적입니다. 그러나 많은 데이터 볼륨에 직면하면 메모리와 시간 간접비가 중요하며 지연이 발생하기 쉽습니다. 실제 애플리케이션에서는 데이터 규모에 따라 데이터 수집 방법을 합리적으로 선택하고 페이징 및 배치 처리와 협력하여 시스템 성능 및 안정성을 보장하는 것이 좋습니다.
이 실제 분석이 Fetch_all () 의 성능 특성을 더 잘 이해하고 적절한 데이터베이스 읽기 계획을 세우는 데 도움이되기를 바랍니다. PHP 및 데이터베이스 성과 최적화에 대한 자세한 내용은 공식 문서 및 커뮤니티 모범 사례를 참조하십시오.